当前位置: 首页 > 面试题库 >

JavaScript在forEach循环中使用异步/等待

呼延辰龙
2023-03-14
问题内容

在循环中使用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,所以我只是想问一下这是否有问题。


问题答案:

确保代码确实有效,但是我很确定它不会实现您期望的功能。它只会触发多个异步调用,但printFiles此后函数会立即返回。

顺序阅读

如果要顺序读取文件, 则不能使用forEach。只需使用现代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);
  }
}

并行阅读

如果要并行读取文件,
则不能使用forEach。每个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)
  }));
}


 类似资料:
  • 本文向大家介绍JavaScript 异步等待循环,包括了JavaScript 异步等待循环的使用技巧和注意事项,需要的朋友参考一下 示例 在循环中使用异步等待时,您可能会遇到其中一些问题。 如果您只是尝试在内部使用await forEach,则会抛出Unexpected token错误。 这是因为您错误地将箭头功能视为一个块。该await会在回调函数,这是不是上下文async。 解释器可以防止我们

  • 问题内容: 我需要一个等待异步调用然后继续的循环。就像是: 我该怎么办?你有什么想法? 问题答案: 如果阻止脚本和浏览器,则无法在JavaScript中混合使用同步和异步。 您需要在此处采用完整的事件驱动方式,幸运的是我们可以将丑陋的东西藏起来。 编辑: 更新了代码。 这将为我们提供一个异步方法,您当然可以进一步修改它,例如使用一个检查循环条件的函数等。 现在进行测试: 并输出:

  • 我是NodeJs的初学者,请原谅。下面的lambda函数是在S3中压缩/压缩文件,并将压缩后的文件上传回S3。包含要压缩的键的列表。如果您注意到(listOfKeys中的const file)的

  • 我在一个循环中调用了一个异步函数来发送电子邮件,但是有一段时间控件没有返回,也没有发送电子邮件,但是主UI线程完成了。 当我把等待任务。WhenAll(发送电子邮件任务);循环内的线工作正常,但当我把这条线放在循环外时,它不工作,但实际上它应该在循环外。我在sendEmail方法中有很多异步方法,所以我认为有些线程彼此重叠。任何线索。

  • 问题内容: 在循环中使用/ 是否有任何问题?我试图遍历文件数组和每个文件的内容。 这段代码确实有效,但是这可能会出问题吗?我让某人告诉我,您不应该在这样的高阶函数中使用/ ,所以我只是想问一下这是否有问题。 问题答案: 确保代码确实有效,但是我很确定它不会执行您期望的功能。它只会触发多个异步调用,但此后函数会立即返回。 顺序阅读 如果要顺序读取文件, 则不能使用。只需使用现代循环即可,该循环将按预

  • 问题内容: 我是这个Node.js的新手..我对此回调有点困惑..在我的应用程序中,我在for循环内调用异步函数调用,我想我的问题是在得到异步调用响应之前, for循环被循环。 我的代码: 搜索功能代码: 我想在成功执行1个搜索功能后执行for循环,我想我必须使用async for loop。请指导我解决此问题。 问题答案: 我将您的代码示例简化为以下几行,以使您更容易理解该概念。 先前代码的问题