2

内の$リソースファクトリ:リコール傍受

.factory('Request', ['$resource', 'general', 
     function ($resource) { 
      return $resource(baseURL + ':resourceName/', {}, { 
       get : { 
        method : 'GET', 
        isArray : true, 
        transformResponse : function (data, headers) { 
         return JSON.parse(data).data; 
        }, 
        interceptor: { 
         responseError : function (data) { 
          gnrl.logIn({},false,function(){console.log("test");}); 
          // ???? How to recall this request? 
         } 
        } 
       } 
      }); 
     } 
    ]); 

私が何をしようとしているが、ユーザがこの要求でいくつかの問題を持っている場合、ユーザーは再度ログインする必要があり、その要求はすべきであり、もう一度実行してください。

次のように要求工場が呼び出されます。

Request.get(params, headers, function (res) { 
    //does some operation with results 
}); 

私はsome relatedquestionsを見てきましたが、それらのどれも完全に私の状況に合うことができませんでした。

答えて

0

これは、質問で言及された回答を使用して解決されます。言ったように、主な考え方は、interceptorの代わりに$promiseを使用していました。

次のように私はこの問題を解決した:

次は

self.doRequest = function(nOfRetries, params, successFunction) { 
     function fai(a) { 
      nOfRetries--; 
      self.logIn(function(){self.doRequest(nOfRetries);}); 
     } 
     if (nOfRetries >= 0) { 
      Request.get(params).then(successFunction).catch(fai); 
     } 
    } 

Login私のサービス内の関数は、同じサービスで、私はに要求を送信するコールバック関数としてだけで別の関数でありますこの関数。次のように

doRequestが呼び出された:エラー(サーバー側かどうかは)doRequest's成功コールバックで発生したことを

.factory('Request', ['$resource', 
     function ($resource) { 
      var res = $resource(baseURL + ':resourceName/', {}, { 
        get : { 
         method : 'GET' 
        } 
       }); 
      return { 
       get : function (arguments) { 
        return res.get(arguments).$promise; 
       } 
      }; 
     } 
    ]) 

注:最後として

general.doRequest(3, params/*parameters used in request*/, function (res) { 
      /***cb function for your initially request*/ 
}); 

、あなたはRequest工場を参照してください関数は、失敗コールバック関数の実行にもつながります。