【发布时间】:2020-03-27 08:38:27
【问题描述】:
目标:从我的目录中获取文件列表;获取每个文件的 SHA256
错误:await is only valid in async function
我不确定为什么会这样,因为我的函数已经包含在异步函数中。任何帮助都非常感谢!
const hasha = require('hasha');
const getFiles = () => {
fs.readdir('PATH_TO_FILE', (err, files) => {
files.forEach(i => {
return i;
});
});
}
(async () => {
const getAllFiles = getFiles()
getAllFiles.forEach( i => {
const hash = await hasha.fromFile(i, {algorithm: 'sha256'});
return console.log(hash);
})
});
【问题讨论】:
-
您的
await位于未声明为async的.forEach()回调中。此外,forEach()不支持承诺,因此它将并行运行您的所有迭代。如果您将.forEach()切换为普通的for (let i of getAllFiles)循环,则上述两个问题都将得到解决。 -
另外,
getFiles()实际上并没有返回任何东西,所以const getAllFiles = getFiles()将不起作用。同样,您需要了解.forEach()接受单独的回调并且从它返回不会对父函数做任何事情。 -
您不能将
forEach与 async-await 一起使用(或者至少,它不会按照您希望的方式工作)。请改用普通的 for 循环。
标签: node.js asynchronous sha256