我想要多个订阅来响应一个可观察的事件,但我也想记录该事件,所以我通过一个 do()
运算符将其通过管道传输,我在其中进行日志记录。
问题是,我创建的每个订阅都会记录一次事件!
我现在通过创建一个 Subject
并从事件回调中调用 next
来解决这个问题,这允许我记录一次事件并触发还有多个订阅。
下面是一些演示问题的代码:https://stackblitz.com/edit/rxjs-xerurd
我觉得我错过了什么,难道没有更“RxJS”的方法吗?
编辑:
我并不是要区分冷热可观察对象,事实上我使用的是热可观察对象——由 fromEvent()
创建的那个表现得好像很冷。
我现在意识到 - 在阅读 share()
之后 - pipe()
“转变”了你可观察到的寒冷,即根据你的来源返回一个寒冷的(它可能冷,可能热)
最佳答案
因为默认情况下 Observable 序列是冷的,每个订阅将有一组单独的站点效果。
如果您希望您的副作用只执行一次 - 您可以通过向多个订阅者广播单个订阅来共享订阅。为此,您可以使用 share
、shareReplay
等
为了更好地理解它是如何工作的,什么是“冷”和发布,请参阅 RxJS v4 文档:
关于javascript - 在 RxJS 中,为什么每个订阅都会执行一次管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52874725/