当前位置:  开发笔记 > 编程语言 > 正文

RxJS5中shareReplay(1)的模式

如何解决《RxJS5中shareReplay(1)的模式》经验,为你挑选了1个好方法。

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

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

创建一个可观察的

订阅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



1> user3743222..:

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

shareReplay是a的multicast运算符ReplaySubject,后跟a 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文档,您可以在其中找到有关冷热可观测量的解释.

在这里,并在这里是资源的一些例子.

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

受试者很热(大多数情况下反正,因为你可能认为重播主体的行为比冷观察者更接近)

除非明确另有说明,否则所有可观察物都是冷的.

明确的办法,使感冒观察到的热点之一,你有multicast运营商及其衍生物share,publish,shareReplay等这些运营商内部都涉及科目.

请注意,您不必看到使用这些运算符.但在这种情况下,API或文档应明确告诉您.例如,Rx.Observable.fromEvent('input','click')很热.你可以在它的实现中看到有一个share地方.

对于热/冷二分法,你必须添加connectable直到它连接的那种,既不热也不冷.

defer 总是会产生寒冷的可观察性.

最后,一些运算符不会改变observable的性质,但会在内部创建热的observable并在其流中传递它们.例如,就是这种情况groupBy.op1.op2.groupBy很冷,但它会在结果流中发出热观察值作为值.在这些情况下,只有文档(如果有的话)可以帮助您找到答案.否则,源代码和测试规范.或者询问SO.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有