$ cacheFactory를 사용하여 $ resource 위에 비동기 캐시를 구현하려고합니다.
$ http 소스를 둘러 보면 캐시에서 반환 약속을 지원하는 것으로 보입니다. 그 후에는 캐시 데이터로 약속을 해결하거나 거부하고 $ http가 캐시에 다시 데이터를 넣을 것을 가정합니다. 문제는 .. 난 그냥 작동하지 않습니다. $ http가 실제로 약속을 지원합니까? 당신이 약속 (라인 # 898를) 반환하는 경우 실제로 확인 않습니다 볼 수
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 캐싱을 처리했다있다. 그러나 해결 또는 거부 모두 보류 대기열에서 요청을 단순히 지우는 것으로 나타납니다. 요청을 계속하기 위해 데이터 또는 단일 $ http를 실제로 보내려면 어떻게해야합니까?
여기 내가 수행하려고하는 것에 대한 대략의 Plunker입니다.
http://plnkr.co/edit/TwXumrAunG9b5JKo5OlB?p=preview
는 코멘트에 말했듯이 캐시 항목 즉 아직 완료가 호출 해결되지 약속을 수 있습니다. 캐시 된 약속은 반환입니다. 그렇습니다. 그렇습니다. 약속과 함께 작동합니다. 나는 당신이 달성하기를 정말로 원하지 않는다. 이 캐시는 http 응답 캐시이므로 문자열을 통해 저장된 문자열과 json과 같은 정보가 반환됩니다. 약속이있는 유일한 이유는 호출이 실행 중임을 나타내는 것입니다. – Jon
해결책을 찾았습니까? – MayK
그래, Angular를 사용하여 종료하십시오. :) '정답'에 따라 이것은 버그였습니다. 상태가 현재 무엇인지 확실하지 않은이 질문이 나온 직후부터 Angular를 사용하지 않았습니다. –