首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shareReplay(1)在RxJS5中的模式

shareReplay(1)在RxJS5中的模式
EN

Stack Overflow用户
提问于 2016-01-04 21:22:21
回答 1查看 4.2K关注 0票数 12

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

我很可能经常在RxJS4中滥用RxJS4,但现在我很难得到我想要的行为,即:

  • 创造一个可观察的
  • 订阅可观测值,可观测值产生值。
  • 第二次订阅可观测值,我得到相同的第一个值。
  • 可观察性生成第二个值,两个订阅都获得第二个值。

如何用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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-05 01:53:51

这个问题最好由参加Rxjs5的成员回答,但以下是我的看法:

  • shareReplay是带有ReplaySubjectmulticast运算符,后面是refCount。所以我敢打赌,publishReplay(x).refCount()应该非常接近shareReplay的行为。无论如何,publishReplay已经给出了您提到的所有要点。当没有更多的观察者时,refCount会添加取消订阅(refCount降到0)。
  • 你可以看看这里的规格,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是冷的,但是它会以结果流中的值的形式释放出热的可观测值。在这些情况下,只有文档(如果有的话)可以帮助您找到答案。否则,源代码和测试规范。或者这么问。
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34600088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档