gpt4 book ai didi

javascript - 为什么可连接的可观察对象只执行一次

转载 作者:行者123 更新时间:2023-11-29 23:53:23 25 4
gpt4 key购买 nike

我有一个可连接的可观察对象,它将在另一个流执行时连接:

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 将不再订阅,我的问题是,为什么?

最佳答案

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

如果您更新示例的第一部分,您将看到主题收到一个完成通知:

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

这将 Subject 标记为已关闭,并且不会再重新发送任何值。

有关更多详细信息,请参阅我上面的链接答案。你也可以看看 On The Subject Of Subjects (in RxJS) (paragramp Subjects Are Not Reusable)作者:Ben Leash(RxJS 5 的首席开发人员)。

关于javascript - 为什么可连接的可观察对象只执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42269713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com