当我将代码转换为异步等待时,我需要将函数转换为异步,但是我遇到了2问题。第一个是直接函数,可以从文件中获取哈希值。
const getHash = async (file_to_hash) =>
{
md5File(file_to_hash,(err, hash) =>
{
if (err) throw err
return hash
}
)}
当我通过
调用时 const hash2 = await fh.getHash(newPath +'\\' + origFile.recordset[0].upload_id + '.' + origFile.recordset[0].orig_file_type)
我得到
const hash2 = await fh.getHash(newPath +'\\' + origFile.recordset[0].upload_id + '.' + origFile.recordset[0].orig_file_type)
^^^^^
SyntaxError: await is only valid in async function
我正在使用“ md5-文件”
我的另一个功能是检查文件是否存在以及是否删除
const deleteFile = async (path) => {
fs.exists(path, function(exists) {
if(exists) {
fs.unlink(path)
return true
} else {
return false
}
})
}
调用它时出现以下错误
var delSuccess = await fh.deleteFile(tmpFile)
TypeError [ERR_INVALID_CALLBACK]: Callback must be a function
答案 0 :(得分:-1)
异步函数应返回一个承诺。
如果您的代码不会返回承诺,则需要将其包装在承诺中。
const myFunc = async () => {
return await new Promise((resolve, reject) => {
// write your non async code here
// resolve() or reject()
})
}
如果您的代码返回了一个promise调用,只需等待即可返回。
const deleteFile = async (path) => {
return await fs.exists(path);
}
或者有时您可能想从回调中返回承诺,
const deleteFile = async (path) => {
return await new Promise((resolve, reject) => {
fs.exists(path, function(exists) {
if(exists) {
await fs.unlink(path)
resolve(true);
} else {
resolve(false); // or you can reject
}
});
}
答案 1 :(得分:-1)
您只需要将上述代码包装在async函数中,因为await在async内部有效。喜欢,
async function_name()=> {
try{
let hash2 = await fh.deleteFile(newPath +'\\' +
origFile.recordset[0].upload_id + '.' + origFile.recordset[0].orig_file_type)
} catch(err){
console.log('Error is: ', err);
}
}