等待每个 for 循环迭代完成,然后在 nodejs 中开始下一个
Posted
技术标签:
【中文标题】等待每个 for 循环迭代完成,然后在 nodejs 中开始下一个【英文标题】:Wait on each for loop iteration to finish before starting the next in nodejs 【发布时间】:2021-07-06 09:15:31 【问题描述】:我有一个以逗号分隔的 URL 数组。我似乎无法让循环在开始下一次迭代之前完成每次迭代。 这是我的代码:
const options =
method: 'post',
headers:
'Authorization': 'Basic '+Buffer.from(`$user:$password`).toString('base64')
,
for (let url of urls.split(","))
console.log(url);
await axios.get(url, options)
.then(response =>
console.log(url);
<--Rest of my code-->
)
我可以看到第一个 console.log() 立即运行,因此 for 循环不会在开始下一个迭代之前等待一个迭代完成。
我已经尝试了几种不同的解决方案来尝试使这个异步,包括:
-
将“for”循环更改为“for await”循环,导致保留关键字出现语法错误。
将 For 循环放入异步函数中。
像这样:
const calls = async (urls2) =>
for (let url of urls2.split(","))
await axios.get(url, options)
.then(response =>
console.log(url);
<--Rest of my code-->
)
calls(urls).catch(console.error);
我认为最后一个失败是因为,虽然函数是异步的,但其中的所有内容仍然是同步的。
我需要的只是循环的每次迭代在下一次开始之前完成。 最简单的方法是什么?
【问题讨论】:
【参考方案1】:const calls = async(urls2)=>
for (let url of urls2.split(","))
const response = await axios.get(url,options); //will wait for response
console.log(response.data);
//rest of the code
【讨论】:
以上是关于等待每个 for 循环迭代完成,然后在 nodejs 中开始下一个的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS,如何强制异步 for 循环在传递到下一次迭代之前等待 HTTP 请求解决,这样我们就不会收到 EMFILE 错误?