在 RxJS 5 中分享重播
shareReplay in RxJS 5
根据 RxJS 5 MIGRATION.md 看来 shareReplay()
已被删除。
- 为什么?
.publishReplay(1).refCount()
是否忠实地复制了行为?基本上,我需要向任何新订阅者重播单个最新数据集。
简短的回答:
引用 Blesh 爵士的话:
The problem RxJS 5 is trying to solve is that ConnectableObservables
should be "reconnectable", and refCount
should return an observable
that is cold until subscribed to, then hot until all subscriptions
have ended, then cold again.
问题在于主体在完成后的行为会阻止可连接的可观察对象在完成时重新连接。
长答案:
https://github.com/ReactiveX/RxJS/issues/453
当前的 API 似乎是重新连接问题的两种设想之间妥协的结果。如果相关人员能够总结手头的问题,那就太好了。我的理解是 .publishReplay(1).refCount()
应该保持旧的行为,即当您的订阅者数量达到 0 时,源断开连接,您无法重播。但是不要相信我的话,测试一下,我在讨论后迷路了。
好消息,shareReplay()
回到了 RxJS 5.4.0:
https://github.com/ReactiveX/rxjs/blob/892700dd4f5d5e5f9ae9276ede32208f4390c5e9/CHANGELOG.md#540-2017-05-09
根据 RxJS 5 MIGRATION.md 看来 shareReplay()
已被删除。
- 为什么?
.publishReplay(1).refCount()
是否忠实地复制了行为?基本上,我需要向任何新订阅者重播单个最新数据集。
简短的回答: 引用 Blesh 爵士的话:
The problem RxJS 5 is trying to solve is that ConnectableObservables should be "reconnectable", and
refCount
should return an observable that is cold until subscribed to, then hot until all subscriptions have ended, then cold again.
问题在于主体在完成后的行为会阻止可连接的可观察对象在完成时重新连接。
长答案: https://github.com/ReactiveX/RxJS/issues/453
当前的 API 似乎是重新连接问题的两种设想之间妥协的结果。如果相关人员能够总结手头的问题,那就太好了。我的理解是 .publishReplay(1).refCount()
应该保持旧的行为,即当您的订阅者数量达到 0 时,源断开连接,您无法重播。但是不要相信我的话,测试一下,我在讨论后迷路了。
好消息,shareReplay()
回到了 RxJS 5.4.0:
https://github.com/ReactiveX/rxjs/blob/892700dd4f5d5e5f9ae9276ede32208f4390c5e9/CHANGELOG.md#540-2017-05-09