2

У меня есть следующие factory:

.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

Решится, используя ответы, упомянутые в вопросе. Как уже говорилось, основная идея заключалась в использовании $promise вместо interceptor.

Я решил эту проблему следующим образом:

Следующая функция в моей службы

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 называется следующим образом:

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

Как и в прошлом, вы видите Request завод:

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

Обратите внимание, что любая ошибка (на стороне сервера или нет) произошло в doRequest's успеха обратного вызова функция также приведет к выполнению функции обратного вызова отказа.

Смежные вопросы