簡體   English   中英

forkJoin 獲取請求值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM