Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 刷新后重新启动保存并重试_Angularjs_Restangular - Fatal编程技术网

Angularjs 刷新后重新启动保存并重试

Angularjs 刷新后重新启动保存并重试,angularjs,restangular,Angularjs,Restangular,我正在做一个SPA,它通常是在线的,但可以离线,我必须记录对API的所有请求。当某些请求失败时,我应该稍后重试 我有一个本地数据库来保存所有请求。当我的应用程序启动时,我将检索所有应用程序并重试标记为的应用程序 我需要的是一种基于我已经发送的内容配置Restangular对象的方法。我有一个响应拦截器,我正在保存restangular响应对象 { config: { headers: Object, method: "GET", params: Object,

我正在做一个SPA,它通常是在线的,但可以离线,我必须记录对API的所有请求。当某些请求失败时,我应该稍后重试

我有一个本地数据库来保存所有请求。当我的应用程序启动时,我将检索所有应用程序并重试标记为的应用程序

我需要的是一种基于我已经发送的内容配置Restangular对象的方法。我有一个响应拦截器,我正在保存restangular响应对象

{
  config: {
    headers: Object,
    method: "GET",
    params: Object,
    transformRequest: Array[1],
    transformResponse: Array[1],
    url: "..."
  },
  data: {...},
  headers: {...},
  status: 200,
  statusText: "OK"
}
是否有一个函数可以使用给定的配置对象创建重新启动语言


谢谢

如果我要这样做,我会设置setErrorInterceptor

var yourLocalDb = function($http) {
   var failedRequests = [];

   this.store = function(request) {
      this.failedRequests.push(request);
   }

   this.retry = function() {
     var self = this;
     angular.forEach(this.failedRequests,function(request) {
       $http(request.response.config).then(function() { 
        //in case of success
        self.failedRequests.splice(self.failedRequests.indexOf(request),1);
        request.responseHandler.apply(undefined,arguments);
       }), request.deferred.reject);
     });

   }
} 


Restangular.setErrorInterceptor(function(response, deferred, responseHandler) {

  yourLocalDb.store({
  response : response,
  responseHandler : responseHandler,
  deffered : deffered
  });
}
然后,当你有了连接,你就可以打电话了

yourLocalDb.retry();

没有测试,但它应该会给你线索。

谢谢你的回答。我不能再测试它了,因为几个月前我退出了这个项目,但在此之前我做了类似的事情