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一個熱點可觀察?
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一個熱點可觀察?
Subject
本身很熱/共享。
但是:任何(!最),你追加將創建一個新的流,與以前的流(在這種情況下Subject
)源運營商 - 新的數據流,但是,(對於大多數運營商)不熱,只能通過附加一個熱點運營商(如share
或publish
等...)
所以,當你share
你do
,一切都應該按預期工作進行熱通過獲取一熱流。
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>
哇兩次結果,非常感謝! –
我現在對所有內部流使用'.publishReplay(1).refCount()' –
在我的應用程序,一個電話讀取和運行在兩個HTTP請求... –