为什么连接的可观察得到只执行一次

问题描述:

我有一个可连接的可观察到的,将获得连接,当其他流执行:为什么连接的可观察得到只执行一次

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.

+0

主要开发人员,你有什么建议的解决方案?这肯定是要执行的可观察的通用模式我试图用RxSwift来实现类似于RxSwift的地方,我有一个可连接的可观察节点来包装网络请求,如果网络请求失败,那么我希望能够重新连接... –