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

在循环中使用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此后函数会立即返回。

顺序阅读

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

}));

}

以上是 JavaScript在forEach循环中使用异步/等待 的全部内容, 来源链接: utcz.com/qa/436065.html

回到顶部