微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 async/await 与 forEach 循环一起使用

如何解决将 async/await 与 forEach 循环一起使用

当然代码确实可以工作,但我很确定它没有按照您的预期做。它只是触发多个异步调用,但该printFiles函数在此之后立即返回。

按顺序阅读

如果要按顺序读取文件,确实只需使用现代for … of循环,其中await将按预期工作:

async function printFiles () {
  const files = await getFilePaths();

  for (const file of files) {
    const contents = await fs.readFile(file, 'utf8');
    console.log(contents);
  }
}

并行阅读

如果要并行读取文件,确实每个async回调函数调用都会返回一个 Promise,但您将它们扔掉而不是等待它们。只需使用它map,您就可以等待您将获得的一系列承诺Promise.all

async function printFiles () {
  const files = await getFilePaths();

  await Promise.all(files.map(async (file) => {
    const contents = await fs.readFile(file, 'utf8')
    console.log(contents)
  }));
}

解决方法

在循环中使用async/有什么问题吗?我正在尝试遍历文件数组和每个文件的内容。await``forEach``await

import fs from 'fs-promise'

async function printFiles () {
  const files = await getFilePaths() // Assume this works fine

  files.forEach(async (file) => {
    const contents = await fs.readFile(file,'utf8')
    console.log(contents)
  })
}

printFiles()

这段代码确实有效,但会不会出现问题?有人告诉我你不应该在这样的高阶函数中使用async/ ,所以我只是想问一下这是否有任何问题。await

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。