我希望有多个订阅以对可观察到的事件使用react,但是我也想记录该事件,因此我通过do()
运算符将其通过管道进行记录。
问题是,我创建的每个订阅都会记录一次该事件!
我现在通过创建Subject
并从事件回调中对其调用next
来解决此问题,这使我可以记录一次事件并触发多个订阅。
这是一些演示此问题的代码:https://stackblitz.com/edit/rxjs-xerurd
我有一种想念的东西,不是有更多的“RxJS”方法吗?
编辑:
我并不是要问可观察到的可热事件与可观察到的事件之间的区别,事实上,我使用的是可观察到的热事件-由fromEvent()
创建的可观察事件,并且想知道为什么我推测为热事件的源会表现得很冷。
我现在知道了-在阅读有关share()
的内容之后-pipe()
“转动”了您可观察到的感冒,即根据您的来源返回了一个感冒(可能很冷,可能很热)
最佳答案
由于可观察序列默认情况下是冷的,因此每个订阅将具有一组单独的站点效果。
如果您希望只执行一次副作用-您可以通过向多个订阅者广播单个订阅来共享订阅。为此,您可以使用share
,shareReplay
等。
为了更好地理解它是如何工作的,什么是“冷”并发布,请引用RxJS v4文档:
4.8 Use the publish operator to share side-effects