Angular js 拦截器,returns 一个缓存的响应
Angular js interceptor that returns a cached response
我想制作一个 angularJS 拦截器,当客户端离线时 returns 缓存响应而不是错误,就好像它不是任何错误一样。
到目前为止我所做的是制作一个缓存 api 请求的拦截器:
app.factory('httpCachingInterceptor', function ($q, apiCache) {
return {
'response' : function(response) {
// cache the api
if (response.config.url.indexOf('api/') > 0)
apiCache.addApiCache(response.config.url, response.data);
return response;
},
'responseError' : function(rejection) {
if (rejection.status == -1) {
// get the data from apiCache
//
apiCache.getApiCache(rejection.config.url, function(data) {
// build a new promise and return it as a valid response
})
}
return $q.reject(rejection);
}
}
})
我注意到离线时 rejection.status 是 -1,所以我会检查离线时是否发出了请求。
我的问题是如何构建响应?
我应该做出新的承诺还是可以更新拒绝?
将拒绝的承诺转换为已实现的承诺 return onRejection
处理程序中的值。
相反,要将已履行的承诺转换为已拒绝的承诺,在 onFulfilled
处理程序中抛出 一个值。
有关详细信息,请参阅
我设法让它像这样工作:
'responseError' : function(rejection) {
if (rejection.status == -1) {
// get the data from apiCache
var deferred = $q.defer();
apiCache.getApiCache(rejection.config.url, function(err, data) {
if (err || !data) {
return deferred.reject(rejection);
}
rejection.data = data;
rejection.status = 200;
deferred.resolve(rejection);
console.log("Resolve promise with ", rejection);
})
return deferred.promise;
}
return $q.reject(rejection);
}
所以我做了一个新的承诺,并修改了我从缓存中获取的新数据得到的拒绝。
我想制作一个 angularJS 拦截器,当客户端离线时 returns 缓存响应而不是错误,就好像它不是任何错误一样。
到目前为止我所做的是制作一个缓存 api 请求的拦截器:
app.factory('httpCachingInterceptor', function ($q, apiCache) {
return {
'response' : function(response) {
// cache the api
if (response.config.url.indexOf('api/') > 0)
apiCache.addApiCache(response.config.url, response.data);
return response;
},
'responseError' : function(rejection) {
if (rejection.status == -1) {
// get the data from apiCache
//
apiCache.getApiCache(rejection.config.url, function(data) {
// build a new promise and return it as a valid response
})
}
return $q.reject(rejection);
}
}
})
我注意到离线时 rejection.status 是 -1,所以我会检查离线时是否发出了请求。
我的问题是如何构建响应? 我应该做出新的承诺还是可以更新拒绝?
将拒绝的承诺转换为已实现的承诺 return onRejection
处理程序中的值。
相反,要将已履行的承诺转换为已拒绝的承诺,在 onFulfilled
处理程序中抛出 一个值。
有关详细信息,请参阅
我设法让它像这样工作:
'responseError' : function(rejection) {
if (rejection.status == -1) {
// get the data from apiCache
var deferred = $q.defer();
apiCache.getApiCache(rejection.config.url, function(err, data) {
if (err || !data) {
return deferred.reject(rejection);
}
rejection.data = data;
rejection.status = 200;
deferred.resolve(rejection);
console.log("Resolve promise with ", rejection);
})
return deferred.promise;
}
return $q.reject(rejection);
}
所以我做了一个新的承诺,并修改了我从缓存中获取的新数据得到的拒绝。