switchMap调用内部函数多次

switchMap调用内部函数多次

问题描述:

当我应用switchMap到可观察并返回结果,我期待的认购,结果不会导致开关地图重新运行。switchMap调用内部函数多次

看看下面的代码:

let myObservable = Observable.of('empty') 
    .switchMap(id => { 
     doWork(); 
     return Observable.of('test'); 
    } 
); 

myObservable.subscribe(x => console.log('subscription 1')); 
myObservable.subscribe(x => console.log('subscription 2')); 

function doWork() { 
    console.log('working!'); 
} 

它产生:

working! 
subscription 1 
working! 
subscription 2 

什么进出口寻找是只被调用一次的doWork方法和像这样的输出:

working! 
subscription 1 
subscription 2 

回答相关的其他资源:

Cold vs Hot Observables

.subscribe()调用同一可观察每个(默认)得到自己认购的情况下,从而让它重新运行。如果您希望您的数据流将其结果多播到多个订阅,则可以使用.share()

Ofcourse;即使在使用多播运营商的情况下,考虑到Rx的异步特性,第二次订购对于初始发射值来说可能太晚了。您可以一起下探一切,当你准备好.connect()上游观察到的使用.publish()

注(使它热):不要share()所有的事情比比皆是;它以性能成本为代价,因为它会在内部创建一个引用计数器并将所有值从上游发送到所有观察者,而不是简单地从上游下游传播值。

+1

谢谢你马克。我正在研究冷与热的可观测量,我相信在这种情况下,我确实需要一个热门的可观测量。与共享执行publish()然后connect()是一样的吗? – cgatian

+0

当第一个流订阅时,share()会引用并连接()。 publish()让你在连接()之前订阅所有东西并开始接收上游排放 –

+0

这种类型的RxJs编程是否为反模式?我应该寻找替代方法来做到这一点? – cgatian