我正在使用 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));
The actualFn
is the this.http.get('/some/resource')
.
就像我说的,这对我来说非常有效。缓存在持续时间内从可观察对象返回RECACHE_INTERVAL
。如果在该时间间隔之后发出请求,actualFn()
将被调用。
我想弄清楚的是当RECACHE_INTERVAL
到期并且actualFn()
被调用——如何返回最后一个值。之间有一个时间间隔RECACHE_INTERVAL
到期并且actualFn()
重放可观察对象不返回值。我想摆脱时间差距并始终返回最后一个值。
我可以使用副作用并存储最后一个有价值的调用.next(lastValue)
等待 HTTP 响应返回,但这似乎很幼稚。如果可能的话,我想使用“RxJS”方式,一种纯函数解决方案。
如果你使用简单的逻辑,几乎任何复杂的逻辑都会很快失去控制rxjs
。我宁愿实施自定义cache
从头开始操作,你可以使用这个gist https://gist.github.com/robwormald/19dea0c70a6e01aadced6731aed4f9f7举个例子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)