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

Jaa*_*aap 1 caching promise angularjs

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

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

Ben*_*aum 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);
      }
    }
Run Code Online (Sandbox Code Playgroud)

因此,简而言之 - Angular不会缓存"失败"请求 - 即:具有非成功状态代码的请求.