将2个调用转换为异步功能时出现问题,因此我可以使用异步等待

时间:2018-10-31 18:49:00

标签: node.js

当我将代码转换为异步等待时,我需要将函数转换为异步,但是我遇到了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

2 个答案:

答案 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);
    }
 }