我有一個可觀察的創建成本很高,所以我的shared
它。然而,在某些情況下,所有訂戶都會取消訂閱,然後立即(或在短暫延遲後)新訂閱者訂閱。rxjs5:延遲取消訂閱共享可觀察者
實際觀察到的太複雜,這裏複製的,但對於參數的緣故:
const heavyObservable = Rx.Observable.create((observer) => {
console.log('I am expensive, avoid hitting this code');
return Rx.Observable
.interval(500) // these updates are cheap though!
.subscribe(observer)
.add(() => {
console.log('Cache has been destroyed, will have to be rebuild on next call');
});
});
我不想打了創建這個觀察到昂貴的代碼。我想延遲斷開,直到n ms。有沒有辦法做到這一點?
const sharedObservable = heavyObservable
.publish()
// ideally I'm looking for a way to get refCount to wait for new
// subscribers for n ms before unsubscribing when refcount === 0
.refCount();
// calling subscribe here invokes heavyObservable which can take a bit of time
const subscription1 = sharedObservable.subscribe();
// log: I am expensive, avoid hitting this code
// second call is "free" - the underlying observable is reused
const subscription2 = sharedObservable.subscribe();
subscription1.unsubscribe();
subscription2.unsubscribe();
// calling subscribe again here invokes heavyObservable over again
const subscription3 = sharedObservable.subscribe();
// log: I am expensive, avoid hitting this code
有關調查可觀察到的數據,並將其轉換,並保持它是最新的。只要變換後的數據發生變化,它就會發射。這個轉換最初很昂貴,但維護起來很便宜。我可以使用連接,這將保持服務器連接永久打開。如果可能的話,我想斷開連接。大多數情況下,這工作得很好,但我有一些邊界情況下快速退訂和重新結束。我可以在調用者中通過添加一個明確的,長期存在的sub來處理這個問題,但是這是一個需要記住要做的和清理的額外事情。我寧願有可觀察的處理訂閱「平滑」 – studds
您可以發佈該流嗎? - 如果沒有完整的圖片,幾乎不可能提供適當的幫助(當然,你可以改變網址等。) – olsn
我很喜歡,但它太大而無法在這裏複製。顯然,如果我可以讓代碼更便宜運行或避免運行代碼,那最好,但這超出了堆棧溢出問題的範圍,我想。我添加了一個micky-mouse示例來嘗試並更好地說明目標。 – studds