Я пытаюсь реализовать асинхронный кеш поверх $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 о том, чего я пытаюсь достичь.