[英]How to make concurrent api calls in a for loop?
我有以下代碼:
Promise.resolve(axios.get(`apiwebsite.com/api?tag=${tagsArr[0]}`)),
Promise.resolve(axios.get(`apiwebsite.com/api?tag=${tagsArr[1]}`)),
Promise.resolve(axios.get(`apiwebsite.com/api?tag=${tagsArr[2]}`)),
]).then((all) => {
res.json({"success": true, "test": all[0].data}, "test1":all[1].data, "test2":all[2].data);
});
tagsArr 的長度未知。 因此,我想實現某種 for 循環,對每個標簽 Arr 進行 API 調用
for(let i = 0; i < tagsArr.length; i++) {
Promise.resolve(axios.get(`apiwebsite.com/api?tag=${tagsArr[i]}`)),
}
現在這就是問題所在。 我還希望我的 API 調用是並發的。 如何在為每個標簽進行 API 調用的同時循環遍歷 tagsArr,同時進行並發 API 調用?
您可以創建一組已執行的承諾並等待所有承諾。
const promises = tagsArr
.map(tag => axios.get(`apiwebsite.com/api?tag=${tag}`));
Promise.all(promises)
.then(responses => {
// Do your thing here...
});
嘗試將它們放入數組並使用 Promise.all:
Promise.all([
axios.get(`apiwebsite.com/api?tag=${tagsArr[0]}`),
axios.get(`apiwebsite.com/api?tag=${tagsArr[1]}`),
axios.get(`apiwebsite.com/api?tag=${tagsArr[2]}`),
]).then((all) => {
res.json({"success": true, "test": all[0].data}, "test1":all[1].data, "test2":all[2].data);
});
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.