![](/img/trans.png)
[英]How can i get if a particular request has been completed using forkJoin in Angular 5 as part of parallel request processing?
[英]forkJoin get request value
我正在嘗試使用 forkJoin 調用多個 API。 我相信返回結果的順序可以是隨機的。 是否可以知道哪個結果屬於哪個請求?
現有代碼:
interface Data {
id: number,
input1: number,
input2: number,
sum?: number
}
arrayOfData : Data[] = [{id:1, input1: 5, input2: 3}, {id:2, input1: 2, input2: 4}, {id:3, input1: 1, input2: 4}];
let requests: Observable<Data>[] = [];
calculateSum(d:Data) : Observable<Data>{
return this.callAPI(d);
}
let arrayOfData.forEach(d => {
requests.push(this.calculateSum(d));
});
forkJoin(requests).subscribe(results => {
// results : [{sum: 6}, {sum: 8}, {sum: 5}]
// result only has sum, it does not include id.
// how can I assign this back to the correct array item of Data?
});
我應該使用另一個運算符而不是 forkJoin 嗎?
如果 API 沒有在響應中返回 id,您必須自己跟蹤它。 forkJoin
是有序的,因此使用map運算符很容易管理。
嘗試這個:
interface Data {
id: number,
input1: number,
input2: number,
sum?: number
}
arrayOfData: Data[] = [{id:1, input1: 5, input2: 3}, {id:2, input1: 2, input2: 4}, {id:3, input1: 1, input2: 4}];
calculateSum(d:Data) : Observable<Data>{
return this.callAPI(d);
}
let requests: Observable<Data>[] = arrayOfData.map(d => this.calculateSum(d))
forkJoin(requests)
.pipe(
map(results => results.map((r, i) => ({ ...r, id: arrayOfData[i].id })))
)
.subscribe(results => {
// results : [{id: 1, sum: 6}, {id: 2, sum: 8}, {id: 3, sum: 5}]
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.