我有两个源可观测对象,当一个源可观测对象发出时,我需要从那里计算一些数据。我正在尝试使用combineAll()
运算符,但它仅在每个源可观察对象首次发出时才发出一个值。
是否有任何类似于combineAll()
的运算符在任何可观察到的源首次发出时发出?如果没有,最清楚的方法是什么?
我尝试过的
const source1$ = service.getSomeData();
const source2$ = service.getOtherData();
combineLatest(
source1$,
source2$
).pipe(
map([source1Data, source2Data] => {
// this code only gets executed when both observables emits for the first time
return source1Data + source2Data;
})
)
最佳答案
一种方法是在所有源前面加上startWith
:
combineLatest([
source1$.pipe(startWith(?)),
source2$.pipe(startWith(?)),
])
看起来您可能正在寻找
race(source1$, source2$)
可观察的创建方法,或者只是merge(source1$, source2$).pipe(take(1))
。但这实际上取决于您想做什么。