4

すべての API エンドポイント コネクタを保持するサービスがあります。これらのエンドポイント コネクタは ngResource オブジェクトです。

getそれらのいくつかでは、またはなどのデフォルトのメソッドをオーバーライドしてquery、たとえば追加しresponseTransformersます。timeoutメソッドのプロパティを設定して、あるリクエストを別のリクエストを送信する前に停止できるようにしたいのですが、すべての sgetを定義するサービスでは実行したくありません。$resource

this.collections = $resource(BackendConfig.apiUrl + 'collections/:uid/', {}, {
    query: {
        isArray: false,
        method: 'GET',
        timeout: myTimeoutPromise
    },
});

しかし、実行時、これを行う直前に

Resource.collections.query().then(function () {});

コードを分析すると、params (2 番目のパラメーター) はオーバーライドできますが、actions (3 番目) はオーバーライドできないという結論に達しました。

私は可能な(まだ実装されていない)解決策を見つけました:すべてのタイムアウトを保持する新しいサービス(Interrupterとしましょう)を作成し、必要な場所にリソースサービスに注入し、そこでタイムアウトの約束を定義します。もっと便利な解決策はありますか?

4

1 に答える 1

0

あなたの $resources が何をするのかはわかりませんが、promise をプロバイダーにチェーンできるかもしれません。

$http.get( SOME_URL_HERE ).
  then( function(response){
    /*Resolve the first promise then chain your other requests*/
    var promises = [ ];

    promises.push ( $http.get( OTHER_URL ) );
    promises.push ( $http.get( AGAIN_OTHER_URL ) );

    return $q.all( promises );
  })
  .then ( function( responses){
    /*This 'then' is of the chaining*/
    reponses[0].something /*response of the first promise*/
    reponses[1].something /*response of the second promise*/

  })
  .catch( function(error){
    console.log( error );
  });
于 2015-02-16T06:58:07.333 に答える