我需要执行并行请求,在完成所有这些请求之后,我需要再执行一次调用。
public loadAppData() {
// get current Data
let currentData: any = this.sourceAppData.getValue();
// load userInfo
return this.storage.get('userInfo').then((userInfo) => {
this.userInfo = userInfo;
// call endpoints
let products = this.loadProducts();
let customers = this.loadCustomers();
let priceRules = this.loadPriceRules();
let shop = this.loadShop();
// load in parallel
return forkJoin([products, customers, priceRules, shop]).subscribe(results => {
let currentData: any = this.sourceAppData.getValue();
currentData.products = results[0];
currentData.customers = results[1];
currentData.priceRules = results[2];
currentData.shop = results[3][0];
this.updateAppData(currentData);
});
// I need one more request here
});
}
在ForkJoin之后我需要再打一次电话,因为我在其中一个呼叫中有一个信息,我依赖它。问题是我已经订阅了这个电话。
如何执行forkJoin,获取fork join的结果,再做一次请求,而不是应该执行常规流程(比如订阅它)。
答案 0 :(得分:0)
您可以在forkJoin
电话后使用mergeMap
。并且可以使用return forkJoin([products, customers, priceRules, shop]).pipe(
mergeMap(
results => oneMoreOperation(results),
(results, oneMoreResult) => [...results, oneMoreResult]
)
).subscribe(resultsWithOneMoreResult => {
...
});
的结果选择器将另外一个结果添加到结果数组中:
oneMoreOperation
TableStyle()
是一个返回ObservbleInput
的函数。