2014-07-23 2 views
2

$ 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

+0

는 코멘트에 말했듯이 캐시 항목 즉 아직 완료가 호출 해결되지 약속을 수 있습니다. 캐시 된 약속은 반환입니다. 그렇습니다. 그렇습니다. 약속과 함께 작동합니다. 나는 당신이 달성하기를 정말로 원하지 않는다. 이 캐시는 http 응답 캐시이므로 문자열을 통해 저장된 문자열과 json과 같은 정보가 반환됩니다. 약속이있는 유일한 이유는 호출이 실행 중임을 나타내는 것입니다. – Jon

+0

해결책을 찾았습니까? – MayK

+0

그래, Angular를 사용하여 종료하십시오. :) '정답'에 따라 이것은 버그였습니다. 상태가 현재 무엇인지 확실하지 않은이 질문이 나온 직후부터 Angular를 사용하지 않았습니다. –

답변

0

는 AngularJS와의 버그가 있습니다. 캐시에서 약속 된 리턴을 해석 (또는 거부) 할 때 $ http는 어떤 식 으로든 데이터를 처리하지 않습니다.

관련 버그 https://github.com/angular/angular.js/pull/6534