2017-02-10 81 views
1

我知道我需要使用startWith,但仍試圖弄清楚如何使用它。如果我只是做Subject.create().startWith("Some Value),它會將Subject變成Observable,並且我不能使用next發出。RXJS主題,每次首次訂閱時返回相同的值

因此,多個訂戶應該能夠subscribe它。應該可以撥打nextSubject。閱讀Subject.create()的文檔,但速度很慢。

編輯: 我在使用公認的解決方案後纔開始工作。之所以不工作的原因是因爲我把.next調用放入訂閱中。

如:

observable.subscribe((res) => { 
// do something 
s.next('another res'); 
} 

這將創建一個無限循環,我認爲RXJS預防呢?無論如何,我把next放在那裏用於調試目的。我把它移到了subscribe塊之外,現在和初始結果發出,然後當next被調用時,subscribe裏面的東西再次發出。

回答

1

您應該避免使用Subject.create()並只使用Subject()。請參閱:Subject vs AnonymousSubject

只要保持在主題實例的引用和另一個引用您需要的可觀測鏈:

let s = new Subject(); 
let observable = s.startWith("Some initial message"); 

observable.subscribe(...); 
s.next('whatever'); 
+0

我試着這樣做,但是當我打電話'next'上可觀察到的不發射's' –

+0

感謝martin,我認爲RXJS在我爲了調試目的而在訂閱中加入'next'時阻止了我愚蠢的無限循環。將它移出邊,現在最初和下一次都會完成。 –