如何在循环的每次迭代中等待异步操作完成

时间:2020-08-18 04:16:23

标签: javascript

我正在使用外部API按顺序创建一组文件夹。

chapters.forEach(function createFolder(chapter) {
  axiosInstance.post(folderCreateURL, {
      name: chapter,
      category_id,
    })
    .then(response => console.log(response))
    .catch(error => console.error(error));
});

这里的章节是一个存储文件夹名称的数组。我需要遍历此数组,并一个接一个地创建文件夹。理想情况下,我想在上一个循环语句的then子句中调用循环的下一个迭代-我猜可能是某种收益率可以在这里工作。

那么,任何人都可以给我一些指导以帮助我取得进步,或者指向我一些可以帮助我自己解决问题的资源吗?

1 个答案:

答案 0 :(得分:3)

您可以将其包装在async函数中,并使用for循环进行迭代(在下面的示例中,我使用for..of

以下代码段可以帮助您

async function run() {
  for (let chapter of chapters) {
    try {
      const response = await axiosInstance.post(folderCreateURL, {
        name: chapter,
        category_id,
      })
      console.log(response)
    } catch (err) {
      console.error(error)
    }
  }
}

run()

带有假数据的演示

function request(x) {
  return new Promise(function (resolve) {
    setTimeout(function () {
      resolve(x)
    }, 500)
  })
}

async function run() {
  const chapters = [1, 2, 3, 4, 5]
  for (let chapter of chapters) {
    try {
      const response = await request(chapter)
      console.log(response)
    } catch (err) {
      console.error(error)
    }
  }
}

console.log('start')
run()