我正在处理一个SPA,该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?
感谢
如果我要这样做,我会设置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();
没有测试,但它应该会给你线索。