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