Angular4如何使用flatMap链接forkJoin
我需要进行5个可以并行执行的http调用+在这5个调用之后需要执行的另一个http调用 我在前5个版本中使用了forkJoin,但我不知道如何链接flatMap或其他函数Angular4如何使用flatMap链接forkJoin,angular,http,rxjs,chaining,Angular,Http,Rxjs,Chaining,我需要进行5个可以并行执行的http调用+在这5个调用之后需要执行的另一个http调用 我在前5个版本中使用了forkJoin,但我不知道如何链接flatMap或其他函数 forkJoin( firstObservable, secondObservable, thirdObservable, ..) .subscribe(results => { this.myComposedObject = results[
forkJoin(
firstObservable,
secondObservable,
thirdObservable,
..)
.subscribe(results => {
this.myComposedObject = results[0];
let secondResult = results[1];
let thirdResult = results[2];
[...]
// !!! AT THIS POINT I WOULD NEED TO MAKE AN EXTRA CALL!
// results[1] contains data I need to make the extra call
//
this.myComposedObject.second = secondResult;
this.myComposedObject.third = thirdResult;
});
我在一个组件中执行此操作,因此最后我将数据分配给myComposedObject。就像您所说的,可以使用forkJoin发出5个并行请求。然后,您希望在前5个操作完成后发出另一个请求,这样您就可以使用concatMap操作符链接它,或者mergeMap也可以在这里工作 然后,您需要将所有结果组合在一起,以便可以使用map将最后一个结果添加到与前五个结果相同的数组中
forkJoin(
firstObservable,
secondObservable,
thirdObservable,
...
)
.concatMap(firstFiveResults => makeAnotherCall(firstFiveResults[1])
.map(anotherResult => [...firstFiveResults, anotherResult])
)
.subscribe(allResults => {
this.myComposedObject.second = allResults[1];
this.myComposedObject.third = allResults[2];
// allResults[5] - response from `makeAnotherCall`
....
});
谢谢,这为我指明了正确的方向。 我对结果类型有一些问题。当我试图分配
this.myComposedObject.second = allResults[1];
编译器抱怨类型转换,所以我将在这里向其他人报告我的解决方案
为了解决此问题,您可以在此处利用分解更多信息:
forkJoin(
firstObservable,
secondObservable,
thirdObservable,
...
)
.concatMap(firstFiveResults => makeAnotherCall(firstFiveResults[1])
.map(anotherResult => [...firstFiveResults, anotherResult])
)
.subscribe((allResults: [
TypeA, <-- type returned from firstObservable
TypeB,
TypeC,
TypeD,
TypeE
]) => {
this.myComposedObject.second = allResults[1];
this.myComposedObject.third = allResults[2];
// allResults[5] - response from `makeAnotherCall`
....
});