繁体   English   中英

RxJS5中shareReplay(1)的模式

[英]Pattern for shareReplay(1) in RxJS5

我已经开始玩RxJS5,现在看到不再有shareReplay方法了。

很可能我经常在RxJS4中滥用shareReplay ,但现在我正在努力获得我想要的行为,即:

  • 创建一个可观察的
  • 订阅observable,observable产生一个值
  • 第二次订阅observable,我得到相同的第一个值
  • Observable产生第二个值,两个订阅都获得第二个值

如何使用RxJS5实现此功能?

总的来说,我认为我对RxJS运算符非常了解,但对我来说,整个冷,热,发布,连接都不太清楚。 有没有一个很好的参考,显示如何找到我有什么样的可观察量,以便我能够以逻辑的方式找出为什么订阅没有获取值,或者为什么一个observable被执行多次?

编辑

快乐新闻,shareReplay()又回到了RxJS 5.4.0:

更新日志: https//github.com/ReactiveX/rxjs/blob/892700dd4f5d5e5f9ae9276ede32208f4390c5e9/CHANGELOG.md#540-2017-05-09

Barebones文档: http//reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-shareReplay

参与Rxjs5的成员最能回答这个问题,但这是我的看法:

  • shareReplaymulticast与操作者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)

关于你的其余问题:

  • 我想我们都想要那个good reference that shows how to find what kind of observable I have... 有许多地方,包括Rxjs4文档,您可以在其中找到有关冷热可观测量的解释。
  • 在这里 ,并在这里是资源的一些例子。

遵循我自己目前对此事的理解:

  • 受试者很热(大多数情况下反正,因为你可能认为重播主题的行为比冷观察者更接近)
  • 除非明确另有说明,否则所有可观察物都是冷的。
  • 在使用冷可观察热点的明确方法中,您可以使用multicast运算符及其衍生产品sharepublishshare shareReplay等。这些运算符内部都涉及主题。
  • 请注意,您不必看到使用这些运算符。 但在这种情况下,API或文档应明确告诉您。 例如, Rx.Observable.fromEvent('input','click')很热门。 您可以在其实现中看到某处有share
  • 对于热/冷二分法,你必须添加connectable类型,直到它连接,既不热也不冷。
  • defer总会引起冷漠的观察。
  • 最后,一些运算符不会改变observable的性质,但会在内部创建热的observable并在其流中传递它们。 例如groupBy就是这种情况。 op1.op2.groupBy很冷,但它会在结果流中将热观察值作为值发出。 在这些情况下,只有文档(如果有的话)可以帮助您找到答案。 否则,源代码和测试规范。 或者询问SO。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM