RxJs で Time Expiry キャッシュを実装したいと思います。「通常の」キャッシュの例を次に示します。
//let this represents "heavy duty job"
var data = Rx.Observable.return(Math.random() * 1000).delay(2000);
//and we want to cache result
var cachedData = new Rx.AsyncSubject();
data.subscribe(cachedData);
cachedData.subscribe(function(data){
//after 2 seconds, result is here and data is cached
//next subscribe returns immediately data
cachedData.subscribe(function(data2){ /*this is "instant"*/ });
});
初めてsubscribe
onを呼び出すと、「重作業」が呼び出され、2 秒後に結果が( ) に保存されます。他の後続のonは、保存された結果をすぐに返します (したがって、キャッシュの実装)。 cachedData
cachedData
AsyncSubject
subscribe
cachedData
私が達成したいのcachedData
は、有効な期間内にこれを「スパイス」することです。その時間が経過したら、新しいデータに対して「ヘビーデューティジョブ」を再実行し、これを新しい時間に再度キャッシュします期間など...
望ましい動作:
//pseudo code
cachedData.youShouldExpireInXSeconds(10);
//let's assume that all code is sequential from here
//this is 1.st run
cachedData.subscribe(function (data) {
//this first subscription actually runs "heavy duty job", and
//after 2 seconds first result data is here
});
//this is 2.nd run, just after 1.st run finished
cachedData.subscribe(function (data) {
//this result is cached
});
//15 seconds later
// cacheData should expired
cachedData.subscribe(function (data) {
//i'm expecting same behaviour as it was 1.st run:
// - this runs new "heavy duty job"
// - and after 2 seconds we got new data result
});
//....
//etc
私は Rx(Js) が初めてで、クールダウンを使用してこのホット オブザーバブルを実装する方法がわかりません。