2015-02-05 128 views
0

我正在开发通常在线但可以脱机的SPA,并且必须将所有请求记录到API中。当某些请求失败时,我应该稍后重试。重新刷新后重新保存并重试

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

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

{ 
    config: { 
    headers: Object, 
    method: "GET", 
    params: Object, 
    transformRequest: Array[1], 
    transformResponse: Array[1], 
    url: "..." 
    }, 
    data: {...}, 
    headers: {...}, 
    status: 200, 
    statusText: "OK" 
} 

是否有一个函数用给定的配置对象创建一个Restangular?

感谢

回答

0

如果我想这样做,我会设置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(); 

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

+0

谢谢你的回答。几个月前我退出了该项目,但在此之前我做了类似的事情,我无法再对其进行测试 – subarroca 2016-01-28 11:57:19