forkJoin 但下一个可观察到的取决于之前的那个

forkJoin but next observable depends on the one before

https://www.learnrxjs.io/learn-rxjs/operators/combination/forkjoin

const example = forkJoin({
  // emit 'Hello' immediately
  sourceOne: of('Hello'),
  // emit 'World' after 1 second
  sourceTwo: of('World').pipe(delay(1000)),
  // throw error
  sourceThree: throwError('This will error')
}).pipe(catchError(error => of(error)));

// output: 'This will Error'
const subscribe = example.subscribe(val => console.log(val));

这是主要实现,但在我的例子中,要调用 sourceTwo,我需要使用来自 sourceOne 的数据,与 sourceThree 相同。所有调用都需要先前的可观察对象才能获取数据。

我只关心最后的结果,不需要合并任何东西,按照这个例子做的,展示什么sourceThree returns

forkJoin is intended to run calls in parallel,喜欢Promise.all()。在你的情况下,你不能这样做,因为调用相互依赖。

相反,you can pipe them。如果你可以并行化 2 和 3,你可以做类似下面的事情。

sourceOne.pipe(
  res => forkJoin(makeCall2(res), makeCall3(res))
)

完成 Promise 比较:

makeCall().then(res => Promise.all([
    makeCall2(res),
    makeCall3(res)
]));