我开始玩RxJS5,现在看到不再有shareReplay
方法了。
我很可能经常在RxJS4中误用shareReplay
,但现在我很难得到我想要的行为,即:
如何使用RxJS5实现此功能?
总的来说,我认为我对RxJS运算符了解得很好,但对我来说,整个冷,热,发布,连接都不太清楚。是否有一个很好的参考,显示如何找到我有什么样的可观察量,以便我可以以逻辑的方式找出为什么订阅没有获取值,或者为什么一个observable被执行多次?
修改
快乐新闻,shareReplay()又回到了RxJS 5.4.0:
Barebones文档:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-shareReplay
答案 0 :(得分:22)
参与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。