2017-01-14 49 views
1

當您需要共享可觀察執行時,您可以使用執行publish()refCount()方法的共享運算符,但在使用Subjects時,如何使用refCount()Rxjs使用主題與refCount

new Subject().refCount() 

回答

2

這是因爲refCount()不像其他運營商。

當您使用publish()運算符時,它將返回ConnectableObservable的實例。 refCount() is an operator specific only to ConnectableObservable,你不會在任何其他Observable中找到它。

一個很好的問題是你想要的實現與refCount()Subject因爲refCount()真正有意義只有當你想從可觀察源訂閱/退訂(我不知道你的具體使用情況是什麼)。

無論如何,如果有意義的話,您總是可以使用(new Subject()).publish().refCount()

+0

我有多個觀察者需要以共享相同的執行,並且我希望在觀察者的數量爲0時使用refCount自動取消訂閱主題。 – undefined

+0

而且我需要使用主題,因爲我想手動調用next() – undefined

+0

@undefined然後使用Subject你需要它。例如:'let source = new Subject(); let obs = source.publish()。refCount(); obs.subscribe(....)' – martin

1

一個Subject已經,這意味着沒有必要額外使用refCountpublish等。

這是從docs的摘錄:

以這種方式,受試者可以充當代理爲一組用戶和源的。 [...]此外,您可以使用主題廣播數據給多個訂戶

+0

所以你說當他沒有任何觀察者時,主體會自動取消訂閱? – undefined

+0

我不確定你的意思 - 在你提供的代碼中沒有'Subject'訂閱的源代碼 - 所以它不能退訂任何東西。 – olsn

+0

是的,這只是一個和平,我有多個觀察員。 – undefined