等待每个 for 循环迭代完成,然后再开始 nodejs

时间:2021-07-06 09:15:31

标签: node.js for-loop asynchronous iteration

我有一个 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 循环不会在开始下一次之前等待一次迭代完成。

我尝试了几种不同的解决方案来尝试使此异步,包括:

  1. 将“for”循环更改为“for await”循环,导致保留关键字出现语法错误。
  2. 将 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 个答案:

答案 0 :(得分: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
   }


}