【问题标题】:Does Angular $http cache failed attempts?Angular $http 缓存是否尝试失败?
【发布时间】:2015-07-14 08:14:07
【问题描述】:

我不确定这一点,也没有看到关于它的文档。如果我这样打电话……

...
return $http.get(baseUrl + '/lists/' + listObj.id, {cache: true})
    .then(function(resp){
          ...
          return null;
    }, function fail(err){
          return $q.reject(err);
    });

Angular 会缓存 http 响应并在我下次调用相同的 http 请求时使用该值。但是,假设连接失败或列表对象 id 已创建,因此 url 现在可以工作。它会缓存失败的尝试吗?

如果确实如此,我是否必须手动挖掘 $http.defaults.cache 并将其删除?

【问题讨论】:

    标签: angularjs caching


    【解决方案1】:

    你不需要。当启用缓存时,角度保持与缓存中的 url 相关的承诺对象,并且任何后续请求都将收到相同的承诺,因此不会再次调用服务器。但是在unsuccessful 调用缓存will get removed 的情况下,因为ajax 调用从服务器返回。但是,如果您在此期间再拨打电话,您最终会因所有这些电话而失败,因为它们都有相同的承诺。

    【讨论】:

    • 正是我想知道的。谢谢@PSL。一个小的附录问题。我认为仅当错误代码不在 200 范围内时才正确。假设我正在使用一个提供 200 范围内的东西但作为响应对象的一部分产生错误的 api。在这种情况下,最推荐的强制清除该 id 缓存的方法是什么?
    • @ThinkBonobo 您可以在拦截器中有一个通用逻辑来监听响应并检查响应数据的失败标准,如果失败则自己删除缓存并提供 url 作为键。 http 的缓存对象 ID 是 $http。您还可以为缓存属性提供您自己的缓存名称。相关answer on removing from cache is here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2015-04-29
    相关资源
    最近更新 更多