为什么连接的可观察得到只执行一次
问题描述:
我有一个可连接的可观察到的,将获得连接,当其他流执行:为什么连接的可观察得到只执行一次
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
如果您更新示例的第一部分,你会发现主题收到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();
这标志着作为主题关闭,它不会再发送任何值。
查看我上面链接的答案以获取更多详细信息。你也可以看看On The Subject Of Subjects (in RxJS)(paragramp 主题不能重复使用)由Ben皮带(的RxJS 5.
主要开发人员,你有什么建议的解决方案?这肯定是要执行的可观察的通用模式我试图用RxSwift来实现类似于RxSwift的地方,我有一个可连接的可观察节点来包装网络请求,如果网络请求失败,那么我希望能够重新连接... –