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

时间:2015-03-17 08:45:07

标签: javascript ecmascript-6 rxjs

我有这个准系统示例的行为不像我期望的documentation of 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中没有。有谁知道改变了什么?我无法在the release notes

中发现它

这是一个有2.3.20:fiddle

的jsfiddle

这是一个2.4.1:fiddle

1 个答案:

答案 0 :(得分:2)

对于冷可观察的这种不正确的行为。从数组创建的可观察对象是冷可观察的,并且不能在一个观察者上共享订阅。为了正确的工作,您可以将您的observable转换为热的observable。您可以查看此文档http://xgrommx.github.io/rx-book/content/observable/observable_instance_methods/publish.html。在您的情况下,您可以使用类似http://jsbin.com/mowaco/edit?js,console之类的内容。现在两个订阅都是并行的。