是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>
+0
哇两次结果,非常感谢! –
+0
我现在对所有内部流使用'.publishReplay(1).refCount()' –
在我的应用程序,一个电话读取和运行在两个HTTP请求... –