我正在尝试使用$cacheFactory在$resource之上实现异步缓存。
在$http源代码中,它似乎支持从缓存返回承诺。我会假设,在此之后,我可以简单地解决与缓存数据的承诺或拒绝它,让$http做它的事情,然后将数据放回缓存。问题是. .我就是不工作。$http真的支持承诺吗?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是否返回(第898行)。但是,似乎解析或拒绝都只是从挂起队列中清除请求。我如何实际发送数据或单个$http来继续请求?
这是一个关于我想要完成的事情的普朗克。
http://plnkr.co/edit/TwXumrAunG9b5JKo5OlB?p =预览
AngularJS中有一个bug。当解析(或拒绝)从缓存返回的承诺时,$http不会以任何方式处理数据。
相关的错误https://github.com/angular/angular.js/pull/6534