我已经开始使用RxJS5,现在看到不再有shareReplay方法了。
我很可能经常在RxJS4中滥用RxJS4,但现在我很难得到我想要的行为,即:
如何用RxJS5实现这一点?
总的来说,我认为我对RxJS运算符的理解相当好,但是对我来说,整个冷、热、发布、连接都是相当不清楚的。是否有一个很好的参考资料来说明如何找到我所拥有的可观察的类型,这样我就可以以逻辑的方式找出为什么订阅没有得到值,或者为什么一个可观察到的值被多次执行?
编辑
好消息是,shareReplay()回到了RxJS 5.4.0中:
基本文档:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-shareReplay
发布于 2016-01-05 01:53:51
这个问题最好由参加Rxjs5的成员回答,但以下是我的看法:
shareReplay是带有ReplaySubject的multicast运算符,后面是refCount。所以我敢打赌,publishReplay(x).refCount()应该非常接近shareReplay的行为。无论如何,publishReplay已经给出了您提到的所有要点。当没有更多的观察者时,refCount会添加取消订阅(refCount降到0)。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是冷的,但是它会以结果流中的值的形式释放出热的可观测值。在这些情况下,只有文档(如果有的话)可以帮助您找到答案。否则,源代码和测试规范。或者这么问。https://stackoverflow.com/questions/34600088
复制相似问题