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 о том, что я пытаюсь сделать.

http://plnkr.co/edit/TwXumrAunG9b5JKo5OlB?p=preview

1 ответ

Решение

В AngularJS есть ошибка. При разрешении (или отклонении) обещанного возврата из кеша $http никак не обрабатывает данные.

Связанная ошибка https://github.com/angular/angular.js/pull/6534

Другие вопросы по тегам