错误: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);
})
});
答案 0 :(得分:1)
您的await
不在async
函数内部,因为它位于.forEach()
回调函数中,该回调函数未声明为async
。
您真的需要重新考虑如何处理此问题,因为getFiles()
甚至什么都没有返回。请记住,从回调返回只是从该回调返回,而不是从父函数返回。
这是我的建议:
const fsp = require('fs').promises;
const hasha = require('hasha');
async function getAllFiles() {
let files = await fsp.readdir('PATH_TO_FILE');
for (let file of files) {
const hash = await hasha.fromFile(i, {algorithm: 'sha256'});
console.log(hash);
}
}
getAllFiles().then(() => {
console.log("all done");
}).catch(err => {
console.log(err);
});
在这个新的实现中:
const fsp = require('fs').promises
获取fs
模块的promises接口。await fsp.readdir()
使用promises读取文件for/of
循环,以便我们可以正确地对await
进行异步操作。