Async $cacheFactory с $http и $ ресурсом
Я пытаюсь реализовать асинхронный кеш поверх $resource, используя $ cacheFactory.
Просматривая источник $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 обрабатывает кэширование, как вы можете видеть, оно действительно проверяет, возвращается ли обещание (Строка #898). Но похоже, что как разрешение, так и отклонение просто удаляют запрос из очереди ожидания. Как мне на самом деле отправить данные или один $http, чтобы продолжить запрос?
Вот Plunker о том, что я пытаюсь сделать.
1 ответ
В AngularJS есть ошибка. При разрешении (или отклонении) обещанного возврата из кеша $http никак не обрабатывает данные.
Связанная ошибка https://github.com/angular/angular.js/pull/6534