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

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

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

  • 如何使用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的成员最好回答这个问题,但这是我的看法:

  • 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文档,您都可以在其中找到有关热观测值和冷观测值的说明。
  • Herehere是资源的一些示例。

  • 遵循我目前对此事的理解:
  • 主题很热(无论如何,大多数情况下,就像您可能会说重放主题的行为比可观察到的冷行为更接近)
  • 所有可观察到的东西都是冷的,除非另有明确说明。
  • 在使可观察到的冷热的显式方法中,您具有multicast运算符及其派生类sharepublishshareReplay等。这些运算符内部都涉及主题。
  • 注意,使用这些运算符不一定对您可见。但是在这种情况下,API或文档应明确告诉您。例如,Rx.Observable.fromEvent('input','click')很热。您可以在其实现中看到某个地方有一个share
  • 添加到热/冷二分法中,您必须添加connectable类型,直到连接为止,该类型既不热也不冷。
  • defer总是引起感冒。
  • 最后,一些运算符不会更改可观察对象的性质,但会在内部创建热的可观察对象并将其传递到它们的流中。 groupBy的实例就是这种情况。 op1.op2.groupBy很冷,但是它将在结果流中发出热的可观测值作为值。在这种情况下,只有文档(如果有)可以帮助您查找。否则,请提供源代码和测试规范。或问SO。
  • 10-07 21:43