为什么可连接的observable只执行一次

时间:2017-02-16 09:24:27

标签: javascript rxjs rxjs5

我有一个可连接的observable,当另一个流执行时,它将被连接:

const source1 = Rx.Observable.of([1,2,3,4,5])
  .do(() => console.log('Do Something!'))
  .map(() => "Always connected.")
  .publish();

source1.subscribe((v) => console.log(v));

const connect = () => {
  let c = false;
  return () => {
    if (!c) {
       console.log("Get connected");
       source1.connect();
       c = true;
    }
  }
}


const source2 = Rx.Observable.fromEvent(document, 'click')
   .do(() => console.log("execute!"))
   .do(connect())
   .switchMapTo(source1);

source2.subscribe((v) => console.log(v));

输出

"execute!"
"Get connected"
"Do Something!"
"Always connected."

对文档source1的进一步点击将不再订阅,我的问题是,为什么?

1 个答案:

答案 0 :(得分:1)

您确实遇到过这种情况:Rx.Subject loses events

如果您更新示例的第一部分,您会看到主题收到complete通知:

const source1 = Rx.Observable.of([1,2,3,4,5])
  .do(() => console.log('Do Something!'), null, () => console.log('source1 complete'))
  .map(() => "Always connected.")
  .publish();

这标志着主题已关闭,并且它不会再进一步​​重新提交任何值。

有关详细信息,请参阅上面的链接答案。您也可以看看Ben Leash(RxJS 5的首席开发人员)On The Subject Of Subjects (in RxJS)(paragramp 主题不可重用)。