我正在使用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()
之间有一段时间,可观察对象没有返回值。我希望在时间上消除这种差距,并始终返回最后一个值。
我可以使用一个副作用,并在等待HTTP响应返回的同时存储最后一个好值调用.next(lastValue)
,但这似乎很天真。如果可能的话,我想使用"RxJS“的方式,一个纯函数的解决方案。
发布于 2017-02-19 07:25:42
如果使用普通的rxjs
,几乎任何复杂的逻辑都会很快失控。我宁愿从头开始实现自定义cache
操作符,您可以使用此gist作为示例。
https://stackoverflow.com/questions/42280438
复制相似问题