首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将2个调用转换为异步函数时出现问题,因此我可以使用异步等待

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

Stack Overflow用户
提问于 2018-11-01 02:49:00
回答 2查看 66关注 0票数 0

当我将我的代码转换为异步等待时,我需要将我的函数转换为异步,但我在2上遇到了麻烦。第一个是一个直接的函数,从我的文件中获取散列。

代码语言:javascript
复制
const getHash = async (file_to_hash) =>
{
md5File(file_to_hash,(err, hash) => 
{
    if (err) throw err
    return hash

}
)}

当我通过

代码语言:javascript
复制
 const hash2 = await fh.getHash(newPath +'\\' + origFile.recordset[0].upload_id  + '.' + origFile.recordset[0].orig_file_type)

我得到了

代码语言:javascript
复制
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-file‘

我的另一个功能是检查文件是否存在,如果删除

代码语言:javascript
复制
const deleteFile = async (path) => {
fs.exists(path, function(exists) {
    if(exists) {
      fs.unlink(path)
      return true

   } else {
 return false
   }
  })
}

当调用它时,我得到下面的错误

代码语言:javascript
复制
var delSuccess = await fh.deleteFile(tmpFile)    
TypeError [ERR_INVALID_CALLBACK]: Callback must be a function
EN

回答 2

Stack Overflow用户

发布于 2018-11-01 11:43:54

异步函数应该返回一个promise。

如果您的代码不打算返回promise,则需要将其包装在promise中。

代码语言:javascript
复制
const myFunc = async () => {
  return await new Promise((resolve, reject) => {
    // write your non async code here
    // resolve() or reject()
  })
}

如果您的代码返回promise调用,只需将其与await一起返回即可。

代码语言:javascript
复制
const deleteFile = async (path) => {
  return await fs.exists(path);
}

或者有时您可能想要从回调中返回一个承诺,

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-11-01 11:54:53

你只需要把上面的代码包装在一个异步函数中,因为await在异步函数中是有效的。喜欢,

代码语言:javascript
复制
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);
    }
 } 
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53090138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档