我有以下代码:
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);
});
tagArr的长度未知。因此,我想实现某种for循环,为每个标签Arr进行API调用
for(let i = 0; i < tagsArr.length; i++) {
Promise.resolve(axios.get(`apiwebsite.com/api?tag=${tagsArr[i]}`)),
}
现在这是问题所在。我也希望我的API调用是并发的。如何在对每个标签进行API调用并同时进行API调用时遍历tagArr?
答案 0 :(得分:2)
您可以创建一个已执行的诺言数组,然后等待所有它们。
const promises = tagsArr
.map(tag => axios.get(`apiwebsite.com/api?tag=${tag}`));
Promise.all(promises)
.then(responses => {
// Do your thing here...
});
答案 1 :(得分:0)
尝试将它们放入数组并使用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