我有一个可连接的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
的进一步点击将不再订阅,我的问题是,为什么?
答案 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 主题不可重用)。