forkJoin,但下一个可观察到的依赖于前一个



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返回的内容

forkJoin旨在并行运行调用,如Promise.all()。在您的情况下,您不能这样做,因为呼叫相互依赖。

相反,你可以用管道输送。如果您可以将2和3并行化,那么您可以执行以下操作。

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

完成Promise比较:

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

相关内容

最新更新