gpt4 book ai didi

javascript - 为每个订阅者评估的 rxjs map 运算符

转载 作者:数据小太阳 更新时间:2023-10-29 05:54:19 26 4
gpt4 key购买 nike

为什么 map 运算符针对每个订阅者而不是一次进行评估?

const obs1 = Rx.Observable.interval(1000).take(1).map((x, i) => {
console.log(i+1 + ':1 map')
return 'obs1';
})

const obs2 = Rx.Observable.interval(1300).take(1).map((x, i) => {
console.log(i+1 + ':2 map')
return 'obs2';
})

const obs3 = Rx.Observable.interval(1700).take(2).map((x, i) => {
console.log(i+1 + ':3 map')
return 'obs3';
})

const view = obs1.combineLatest(obs2, obs3, (obs1, obs2, obs3) => { return obs1 + ', ' + obs2 + ', ' + obs3; });

// Every subscriber adds more calls to map - why is it called multiple times at the same time ?

view.subscribe((value) => {
console.log('sub1: ' + value)
});

view.subscribe((value) => {
console.log('sub2: ' + value)
});

view.subscribe((value) => {
console.log('sub3: ' + value)
});

我在这里创建了一个测试用例:http://jsbin.com/jubinuf/3/edit?js,console

我可以用不同的方式编写这个测试用例来避免这种行为吗?

最佳答案

每个订阅者都将运行 Observable 序列。如果您希望每个人都获得结果流,请使用 .publish().refCount() .

http://jsbin.com/ditikonopi/edit?js,console

.publish()将返回一个可观察序列,该序列共享对基础序列的单个订阅。 refCount()只要有至少一个订阅,就会与源保持连接。

关于javascript - 为每个订阅者评估的 rxjs map 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34932935/

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