我創建了一個Observable,在一段時間內緩存它們的結果。這個例子很好,非常有用!但我無法爲物品製作者設置超時時間。我試圖在mockDataFetch()
中使用超時運算符,但在第一個失敗項目後,流無法恢復。 如何通過超時實現mockDataFetch
?如何通過`.publishReplay()`緩存設置RxJS Observable超時?
這正是我所做的:
const Observable = Rx.Observable;
var counter = 1;
var updateRequest = Observable.defer(() => mockDataFetch())
.publishReplay(1, 1000)
.refCount();
function mockDataFetch() {
return Observable.of(counter++)
.delay(Math.floor((Math.random() * 100) + 1))
.timeout(50);
}
function mockHttpCache() {
return updateRequest
.take(1);
}
在另一方面,如果mockDataFetch
內得到一個錯誤時拋出,會發生什麼?我期望在下一個項目(在1000ms之後,因爲它在publishReplay
方法中定義),可觀察項發出一個新項目。
出色答卷。謝謝!!我遵循你的建議。 我希望找到一種方法能夠接收到錯誤,同時保留一些未來觀察者可用的觀測值。我明白,根據ReactiveX規範,在出現錯誤或完成通知後無法接收新項目,但可能有一個可觀察的包含其他項目的項目,仍可能獲得類似的效果。也就是說,第一個可觀察項攔截其下劃線可觀察到的排放,如果出現錯誤,則爲未來的訂閱構建新的可觀察項。 – cspinetta