我的具體情況是,我想運行localforage和休息端點,看起來像之間的緩存種族:資源信令可觀察到年底,但捕捉信號
- 開始請求
- 如果localforage在休息之前返回,向用戶發送信號
- 休息返回時,向用戶發送信號
- 如果在localforage之前返回了其他休息,則不發信號通知localforage響應。
這裏的想法是,在大多數情況下,localforage會有一些可能非常快速返回的過期數據,但是當剩餘端點請求完成時數據將被更新。我可以對這兩個流進行合併,假設localforage將始終在其他請求之前返回(這是一個不合理的假設,但仍然是一個假設)。問題是,如果其他響應具有權威性並且出於某種原因比本地草稿響應更快,則在之後將會發出過時的緩存數據正確的休息響應。
所以我有點想在這些流上做一個.race()
,但不是真的,因爲如果streamA首先完成,我想要與streamB合併。如果streamB首先完成,我想取消streamA。
到目前爲止,我已經打了takeUntil
和race
,而這種作品:
const streamA = Rx.Observable.fromFOO();
const streamB = Rx.Observable.fromBAR().publish();
const cacheRace = streamA.takeUntil(streamB).merge(streamB);
cacheRace.subscribe(listener);
streamB.connect();
我需要使用發佈/連接東西,因爲streamB否則實際上揭開序幕兩個靜止請求 - 一個用於takeUntil,一個用於合併。這很不令人滿意。感覺像我缺少的操作符是takeUntilButNextOnce()或其他東西,或者是合併兩個流但完成合並流的操作符,如果兩個流中的一個完成(但是如果另一個完成則不完成)。
我可以定製的觀測和/或主題,只是處理內部保持狀態,而不是反覆折騰封閉了範圍,然後讓我在這裏使用普通的舊邏輯。