switchMap多次调用内部函数

时间:2016-12-15 20:18:31

标签: rxjs

当我将switchMap应用于observable并返回该结果时,我希望对该结果的订阅不会导致重新运行切换映射。

请使用以下代码:

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

1 个答案:

答案 0 :(得分:0)

对每个(默认)相同Observable的多个.subscribe()调用获取它们自己的订阅实例,从而让它重新运行。如果您希望自己的流将其结果多播到多个订阅,则可以使用.share()

Ofcourse;鉴于使用多播运算符时Rx的异步性质,您的第二个订阅可能对于初始发射值来说太迟了。您可以使用.publish()

准备好.connect()上游可观察对象(使其变热)。

注意:不要share()处处所有的事情;它具有性能成本,因为它会在内部创建一个引用计数器并从上游向所有观察者发出所有值,而不是简单地从上游下游传播该值。