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)
]));
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)
]));