繁体   English   中英

使用 axios 和异步等待循环请求的正确方法是什么?

[英]What is the correct to way to loop request with axios and async await?

我有大约 500 个要循环并从中获取数据的 URL,这些 URL 存储在 const name urls 中:

const urls = []

我想做这样的事情:

for (let i = 1; i <= url.length; i++) {
  const response = await axios.get(url);
  responseList.push(response)
}

响应列表是我在 for 循环之外的另一个常量。

这实际上是有效的,但是 eslint 有一个“no-await-in-loop”的规则,这让我觉得我在这里没有做更优化的事情。

在这种情况下,最佳做法是什么?

实际上eslint以一种相当好的方式准确地指出了您的问题。

通常,应该重构代码以一次创建所有承诺,然后使用Promise.all()访问结果。 否则,每个后续操作将在前一个操作完成之前不会开始。

您收到警告是因为您正在级联而不是并行运行所有 http 调用,这非常慢。 您可以创建一个承诺数组,然后使用 Promise.All()

const promises = urls.map(url => axios.get(url));
const response = await Promise.all(promises);
responseList.push(...response);

Matia 的回答只需稍作修改,记得返回内部承诺:

const promises = urls.map(url => return axios.get(url));
const response = await Promise.all(promises);
responseList.push(...response);

否则,promise 将是一个未定义的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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