![](/img/trans.png)
[英]how to allow delay in looped http request but also use Promise.all to detect when requests are done
[英]Replacing a looped http call with Promise.all
我正在嘗試使用 Axios 替換發送 http 請求的循環。 http 是 Axios object 並返回 promise。 我想更改代碼以便使用 Promises.all() 而不是循環。 我正在嘗試創建一個 Promise,推入一個數組,然后傳遞給 Promises.all。 我的 promises 數組中只有空的 arrays 。
我將不勝感激任何關於我做錯了什么的指示。
// Converting this
responseData = [];
for (const record of response.records) {
let response = await http.get('/records/' + record.id);
responseData.push(response.data.data);
}
// I am trying to convert to this ..
let promises = [];
for (const record of response.data.data) {
let promise = new Promise((resolve, reject) => {
let response = http.get('/records/' + record.id)
.then(response => {
return response.json();
})
.then(resp => {
// console.log(resp.data.data);
//return resp.data.data
resolve(resp.data.data);
});
return response;
});
promises.push(promise);
}
Promise.all(promises).then(records);
不完全確定是否需要 response.json(),以及 .records 和 .data.data 應該在哪里 go ......但這可能有效:
const promises = [];
for (const record of response.records) {
promises.push(
http.get('/records/' + record.id)
.then(response => response.json()) //maybe?
.then(response => response.data.data)
)
}
Promise.all(promises).then(records => { /* do something */ } );
或使用 map:
const promises = response.records.map(record =>
http.get('/records/' + record.id)
.then(response => response.json()) //maybe?
.then(response => response.data.data)
)
Promise.all(promises).then(responseData => {/* do something */} );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.