Я использую RsJS 5 (5.0.1) для кэширования в Angular 2. Он работает хорошо.
Мяч функции кеширования:
const observable = Observable.defer(
() => actualFn().do(() => this.console.log('CACHE MISS', cacheKey))
)
.publishReplay(1, this.RECACHE_INTERVAL)
.refCount().take(1)
.do(() => this.console.log('CACHE HIT', cacheKey));
actualFn
- это this.http.get('/some/resource')
.
Как я уже сказал, это отлично работает для меня. Кэш возвращается из наблюдаемого по длительности RECACHE_INTERVAL
. Если после этого интервала будет выполнен запрос, вызывается actualFn()
.
То, что я пытаюсь понять, это когда истекает RECACHE_INTERVAL
и вызывается actualFn()
— как вернуть последнее значение. Существует промежуток времени между истечением RECACHE_INTERVAL
, и actualFn()
воспроизводится, что наблюдаемый не возвращает значение. Я хотел бы избавиться от этого разрыва во времени и всегда возвращать последнее значение.
Я мог бы использовать побочный эффект и сохранить последний вызов хорошего значения .next(lastValue)
, ожидая ответа HTTP-ответа, но это кажется наивным. Я хотел бы использовать способ "RxJS", решение для чистой функции — если возможно.