2017-02-24 63 views
1

代碼是Rx.Subject一個熱點可觀察?

const a = new Rx.Subject().do(x => console.log('a')) 
const b = a.mapTo(0) 
const c = a.mapTo(1) 
const d = Rx.Observable.merge(b, c) 
d.subscribe(x => console.log('d')) 
a.next(3) 

和輸出

a 
d 
a 
d 

爲什麼一個得到印刷兩次?是不是Rx.Subject一個熱點可觀察?

+0

在我的應用程序,一個電話讀取和運行在兩個HTTP請求... –

回答

3

Subject本身很熱/共享。

但是:任何(!最),你追加將創建一個新的流,與以前的流(在這種情況下Subject)源運營商 - 新的數據流,但是,(對於大多數運營商)不熱,只能通過附加一個熱點運營商(如sharepublish等...)

所以,當你sharedo,一切都應該按預期工作進行熱通過獲取一熱流。

const a = new Rx.Subject().do(x => console.log('a')).share(); 
 
const b = a.mapTo(0); 
 
const c = a.mapTo(1); 
 
const d = Rx.Observable.merge(b, c) 
 
d.subscribe(x => console.log('d')); 
 
a.next(3);
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>

+0

哇兩次結果,非常感謝! –

+0

我現在對所有內部流使用'.publishReplay(1).refCount()' –