私は Angular 2 でキャッシュするために RsJS 5 (5.0.1) を使用しています。うまく動作します。
キャッシュ機能の要点は次のとおりです。
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」方式を使用したいと思います。
ベストアンサー1
単純な演算子を使用すると、複雑なロジックはほとんどすぐに制御不能になりますrxjs
。カスタム演算子を最初から実装する方がよい場合はcache
、これを使用できます。要旨例として。