![](/img/trans.png)
[英]Correct way to cancel async axios request in a React functional component
[英]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.