背景資料
我正在處理一個專案,我需要從多個 API 端點獲取資料,每個端點都有自己的憑據。現在,我正在映射包含所有不同憑據的 JSON 陣列,并將回傳的資料推送到一個空陣列,如下所示。
代碼
const fetchData = async () => {
dataArray = [];
// Loop through all objects in the array, 'arr' contains all of the different credentials.
arr.map(async (obj) => {
// Defining info to access API.
// Authenticating to API.
// Fetching data from API.
// Returns one array containing one or multiple objects. (data).
/* Pushing first object of the array to dataArray. I would also like to push all objects
if there is more than one! */
dataArray.push(data[0]);
});
// Return array after mapping through arr.
return dataArray;
};
module.exports = { fetchData };
問題
如果我這樣做,函式只會回傳一個空陣列。所以它不會等待函式的第一部分(通過 arr 映射)完成。
另一方面,如果我在 fetchData 函式之外的更高級別上宣告空陣列 (dataArray= [];),它會回傳獲取的值。但如果這樣做,陣列不會永遠重置并填充資料。
我怎樣才能解決這個問題?或者有沒有更好的方法來完全做到這一點?
想要的結果
- 函式回圈遍歷包含憑據的 JSON 陣列('arr'),并在其中設定每個物件/憑據后,登錄 API 并回傳值。
- 這些值應收集到一個陣列中,該陣列將包含所有回傳的物件。
- 函式完成后回傳這個陣列。
uj5u.com熱心網友回復:
在 fetchData 函式中使用 Promise.all
let arr=["credential 1","credential 2","credential 3"]
let requestArr = []
for (var i = arr.length - 1; i >= 0; i--) {
//for example we use axios to send request
requestArr.push(axios(`request with releted credential`))
}
//here we got all the promised request array
let responseArr = await Promise.allSettled(requestArr)
responseArr.then(res => {
// res is a arr of all individual request
[res1, res2]
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/403130.html
標籤:
上一篇:反應引導問題
