是Rx.Subject一个热点可观察?

问题描述:

代码是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请求... –

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()' –