angularjs $ http缓存,会缓存服务器错误

时间:2014-11-13 09:16:48

标签: angularjs caching promise

在角度$http.get(url, {cache:true})中,可以很好地缓存服务器响应。但是当对服务器的GET请求失败时,缓存会做什么?这可能是临时连接问题或服务器响应,如超时。

假设我处理错误并显示重试按钮,后续调用$http.get(url, {cache:true})会重试服务器还是会从缓存中给我一个失败的承诺?

1 个答案:

答案 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不会缓存'失败'请求 - 即:请求状态代码为非成功的请求。