【发布时间】:2019-03-23 07:18:25
【问题描述】:
我希望有多个订阅来对可观察的事件做出反应,但我也想记录该事件,因此我通过一个 do() 操作符将其通过管道进行记录。
问题是,我创建的每个订阅都会记录一次事件!
目前我正在通过创建一个Subject 并从事件回调中调用next 来解决这个问题,这允许我记录一次事件并触发多个订阅。
以下是一些演示该问题的代码:https://stackblitz.com/edit/rxjs-xerurd
我觉得我错过了一些东西,难道没有更“RxJS”的方式来做到这一点吗?
编辑:
我并不是要区分 hot 和 cold observable,实际上我使用的是 hot observable - 由fromEvent() 创建的那个,我想知道为什么我的可能很热的事件源表现得像冷的一样。
我现在意识到 - 在阅读了 share() 之后 - pipe() “转变”了你的可观察到的冷,即根据你的来源返回一个冷的(可能是冷的,可能是热的)
【问题讨论】:
-
这是 RxJS 应该做的。如果您只想保留一个订阅源,可以使用
share()运算符。 -
感谢您这么快回答!
share()确实似乎是我正在寻找的东西,但您能否(如果您知道为什么会这样)解释这种设计背后的原因?在我看来,也许“共享”应该是默认设置,“不共享”应该有一个运算符。
标签: javascript rxjs reactive-programming