带有$ http和$ resource的异步$ cacheFactory

时间:2014-07-23 21:02:19

标签: javascript angularjs http cachefactory

我正在尝试使用$ cacheFactory在$ resource之上实现异步缓存。

在$ http源代码中查看它似乎支持从缓存中返回promises。我会假设在那之后我可以简单地用缓存数据解析promise或拒绝它并让$ http做它的事情,然后将数据放回缓存中。问题是..我只是不工作。 $ http ACTUALLY是否支持承诺?

https://github.com/angular/angular.js/blob/master/src/ng/http.js#L895

  if (cache) {
    cachedResp = cache.get(url);
    if (isDefined(cachedResp)) {
      if (isPromiseLike(cachedResp)) {
        // cached request has already been sent, but there is no response yet
        cachedResp.then(removePendingReq, removePendingReq);
        return cachedResp;
      } else {
        // serving from cache
        if (isArray(cachedResp)) {
          resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]);
        } else {
          resolvePromise(cachedResp, 200, {}, 'OK');
        }
      }
    } else {
      // put the promise for the non-transformed response into cache as a placeholder
      cache.put(url, promise);
    }
  }

这是$ http处理缓存,因为你可以看到它确实检查了一个promise是否正在返回(Line#898)。但似乎解析或拒绝只是清除待处理队列中的请求。我如何实际发送数据或单个$ http以继续请求?

这是一个关于我正在努力实现的东西。

http://plnkr.co/edit/TwXumrAunG9b5JKo5OlB?p=preview

1 个答案:

答案 0 :(得分:0)

AngularJS中存在错误。当从缓存中解析(或拒绝)承诺的返回时,$ http不会以任何方式处理数据。

相关错误 https://github.com/angular/angular.js/pull/6534

相关问题