我正在使用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));
Run Code Online (Sandbox Code Playgroud)
该actualFn是this.http.get('/some/resource').
就像我说的,这对我来说非常合适.缓存从observable返回持续时间RECACHE_INTERVAL.如果在该间隔之后发出请求,actualFn()则将调用该请求.
我想弄清楚的是当RECACHE_INTERVAL到期和actualFn()被调用时 - 如何返回最后一个值.在RECACHE_INTERVAL到期和actualFn()重放之间有一段时间,observable不返回值.我想及时消除这个差距,并始终返回最后一个值.
我可以使用副作用并.next(lastValue)在等待HTTP响应返回时存储最后一个好的值调用,但这似乎很幼稚.我想使用"RxJS"方式,一种纯函数解决方案 - 如果可能的话.