繁体   English   中英

如何在 for 循环中进行并发 api 调用?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM