我已经开始使用RxJS5,现在看到不再有shareReplay
方法。
我很可能经常在RxJS4中滥用shareReplay
,但现在我正努力获得所需的行为,即:
如何使用RxJS5来实现呢?
总的来说,我认为我对RxJS运算符了解得很好,但是对我来说,整体的冷,热,发布,连接都还不清楚。有没有很好的引用资料来说明如何查找我拥有的哪种可观察对象,以便可以以逻辑方式找出为什么订阅未获取值或为什么可观察对象被多次执行?
编辑
好消息,shareReplay()回到了RxJS 5.4.0:
更新日志:https://github.com/ReactiveX/rxjs/blob/892700dd4f5d5e5f9ae9276ede32208f4390c5e9/CHANGELOG.md#540-2017-05-09
准系统文档:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-shareReplay
最佳答案
参加Rxjs5的成员最好回答这个问题,但这是我的看法:
shareReplay
是multicast
运算符,带有ReplaySubject
,后跟一个refCount
。因此,我敢打赌publishReplay(x).refCount()
应该与shareReplay
行为非常接近。无论如何,publishReplay
已经为您提供了您提到的所有要点。当没有更多观察者(refCount
减少为0)时,refCount
添加取消订阅。 var replayed = source.publishReplay(1).refCount();
,应该与shareReplay(1)
等效。 关于其余的问题:
good reference that shows how to find what kind of observable I have...
。在很多地方,包括Rxjs4文档,您都可以在其中找到有关热观测值和冷观测值的说明。 遵循我目前对此事的理解:
multicast
运算符及其派生类share
,publish
,shareReplay
等。这些运算符内部都涉及主题。 Rx.Observable.fromEvent('input','click')
很热。您可以在其实现中看到某个地方有一个share
。 connectable
类型,直到连接为止,该类型既不热也不冷。 defer
总是引起感冒。 groupBy
的实例就是这种情况。 op1.op2.groupBy
很冷,但是它将在结果流中发出热的可观测值作为值。在这种情况下,只有文档(如果有)可以帮助您查找。否则,请提供源代码和测试规范。或问SO。