我有两个源可观测对象,当一个源可观测对象发出时,我需要从那里计算一些数据。我正在尝试使用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))。但这实际上取决于您想做什么。

10-06 14:21