在角度$http.get(url, {cache:true})
中,可以很好地缓存服务器响应。但是当对服务器的GET请求失败时,缓存会做什么?这可能是临时连接问题或服务器响应,如超时。
假设我处理错误并显示重试按钮,后续调用$http.get(url, {cache:true})
会重试服务器还是会从缓存中给我一个失败的承诺?
答案 0 :(得分:5)
如果对同一个GET URL发出多个请求,则缓存将导致只有一个请求。引用文档:
如果对应使用相同缓存缓存的同一URL存在多个GET请求,但尚未填充缓存,则只会向服务器发出一个请求,并且将使用来自第一个请求。
但是,如果状态代码不成功,则返回该请求时,它将不会被缓存(它将从缓存中删除)。
我们可以在源代码中看到这一点:
/**
* Callback registered to $httpBackend():
* - caches the response if desired
* - resolves the raw $http promise
* - calls $apply
*/
function done(status, response, headersString, statusText) {
if (cache) {
if (isSuccess(status)) {
cache.put(url, [status, response, parseHeaders(headersString), statusText]);
} else {
// remove promise from the cache
cache.remove(url);
}
}
简而言之 - Angular不会缓存'失败'请求 - 即:请求状态代码为非成功的请求。