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