为什么当订阅两次rx 2.3中的observable时,第二次订阅没有收到任何值

why does second subscribtion not receive any values when subscribing twice to observable in rx 2.3?

本文关键字:第二次 observable 任何值 中的 为什么 rx 两次      更新时间:2023-09-26

我有一个基本的例子,根据rxjs的文档,它的行为并不像我预期的那样。我希望这两个订阅都能接收到所有值。

文件中提到:

然后,两个观察者订阅这个序列并打印出它的值。您会注意到每个订阅者的序列都会重置,其中第二个订阅将从第一个值重新启动序列。

let s1 = rx.Observable.from([1, 2, 3, 4, 9, 11])
s1.subscribe(
    x => console.log(x), 
    x => console.log(x), 
    x => console.log('complete'))
s1.subscribe(
    x => console.log(x), 
    x => console.log(x), 
    x => console.log('complete'))

然而,第二次订阅只记录"完成"

事实证明,该示例在rxjs 2.4中可以正常工作,但在2.3中则不然。有人知道发生了什么变化吗?我在发行说明中找不到它

以下是2.3.20的jsfiddle:fiddle

这里有一个2.4.1:fiddle

这种行为对于冷态可观测对象来说是不正确的。从数组创建的可观察对象是冷可观察对象,并且不能在一个观察对象上共享订阅。对于正确的工作,你可以将你的可观察到的转化为热可观察到。您可以查看此文档http://xgrommx.github.io/rx-book/content/observable/observable_instance_methods/publish.html.在你的情况下,你可以用这样的东西http://jsbin.com/mowaco/edit?js安慰现在两个订阅并行工作。