很可能我经常在RxJS4中滥用shareReplay,但是现在我很难得到我想要的行为,即:
>创建一个可观察的
>订阅observable,并且observable产生一个值
>第二次订阅可观察值,我得到相同的第一个值
> Observable产生第二个值,两个订阅获得第二个值
如何用RxJS5实现?
一般来说,我认为我很了解RxJS的操作符,但是整个冷,热,发布,连接对我来说还不清楚.有没有一个很好的参考,显示如何找到什么样的可观察我有,所以我可以找到一个合乎逻辑的方式为什么一个订阅没有获得价值,或为什么一个可观察者被执行多次?
解决方法
> shareReplay是具有ReplaySubject的多播操作符,后跟一个refCount.所以我敢打赌publishReplay(x).refCount()应该非常接近shareReplay行为.无论如何,publishReplay已经提供了您提到的所有要点.当没有更多观察者(refCount减少到0)时,refCount会添加取消订阅.
>你可以看看这里的规格http://reactivex.io/rxjs/test-file/spec-js/operators/publishReplay-spec.js.html.请参见第127行以上var replayed = source.publishReplay(1).refCount(),这应该等同于你的shareReplay(1).
关于你的其他问题:
>我想我们都想要这个很好的参考,显示如何找到什么样的可观察我有….有很多地方,包括Rxjs4文档,你可以找到关于冷热可观测量的解释.
> Here和here是一些资源的例子.
遵循我自己目前对此事的理解:
科目很热(大多数情况下,您可能会认为重播主题的行为更接近冷观察者)>所有可观察物都是冷的,除非另有明确规定.在明显的冷酷可见的热点之中,你有多播操作符及其衍生工具共享,shareReplay等.这些内部的操作符都涉及到科目.>请注意,您不必看到那些操作符被使用.但是在这种情况下,API或文档应该明确告诉你.例如,Rx.Observable.fromEvent(‘input’,’click’)很热.您可以在其实现中看到某处有一个分享.>到冷/冷二分法,你必须添加连接的类型,直到它被连接,既不热也不冷.>延迟总是引起寒冷的可观察.>最后一些运算符并不改变可观察的性质,而是在内部创建热观测值,并在流中传递它们.例如groupBy就是这种情况. op1.op2.groupBy是冷的,但它将作为结果流中的值发出热观察值.在这些情况下,只有文档(如果有)可以帮助您了解.否则,源代码和测试规范.或问SO.