2017-02-09 56 views
2

我有我分享如下所示的RxJS觀察到的流觀察:當流退訂

var sub = Observable.create(obs => { 
    // logic here 

    return() => { 
     // call rest service to notify server 
    }; 
}) 
.publish() 
.refCount(); 

當最後一個用戶取消訂閱,我需要做一個REST請求。明顯的選擇是將該調用添加到return清理函數中 - 但是隨後您已經打破了任何可觀察的序列,並且任何錯誤等都不易處理。

我只能使用Subject,在清理函數中將一個值推送到它上面,並在其他地方用REST調用掛住它。

理想情況下我會做這樣的事情串聯到處置流與我的REST調用(concat明顯,因爲它是沒有完成將無法正常工作)。

有沒有人有最清潔的方式處理這個問題的任何建議?上述所有選項似乎有點笨重,我覺得我錯過了一些東西。

回答

2

你可以在你的流中實現一個finally(...),進行清理。 流確定後(錯誤或完成),finally自動執行。

注意:當您手動取消,並在您的流不叫complete這將工作。

+0

我的用例僅適用於所有用戶手動取消訂閱 - 我不會完成它,如果出現錯誤,我不需要REST調用。無論哪種方式,最後使用我以上的東西並沒有太大的不同。它打破了流模式,在那裏打電話,失去了錯誤處理等。 – Marcus

+0

這意味着你將不斷髮布流中的數據,而有訂閱者 - 正確嗎? – olsn