首页 > 解决方案 > 为什么try catch不catch await函数错误

问题描述

我知道如果我们有这样的 try catch 设置:

try{
   runSyncFunction()
}
catch(err){
  cosole.log(err)
}

如果在runSyncFunctioncatch 中有错误,就会触发错误。

根据我的理解,如果我们尝试像这样捕获设置:

try{
   runAsyncFunction()
}
catch(err){
  cosole.log(err)
}

如果runAsyncFunctioncatch 中有错误,则不会触发错误,因为该函数稍后运行。

我不明白为什么当我们使用 await 时不会触发 catch 错误:

try{
   await runAsyncFunction()
}
catch(err){
  cosole.log(err)
}

如果这次异步函数有错误,并且由于 javascript 引擎正在等待它完成运行,为什么它无法在错误的情况下捕获错误。

编辑1:

router.post("/postDetails", async(req, res) => {
  try{
     let partID = await database.getPartID(partNumber[i])
     if (!partID) {
            throw createError(404, `"${partNumber[i]}" PartNumber not 
      found. Please re-enter the partnumber`)
    }
    //Other stuff  
  }
  catch(err){
    console.log(err) 
  }
})

第二个功能:

database.getPartID = async function getPartID(partNumber){
    try{
        let partID = await pool.query(`Select partID from parts where partNumber = '${partNumber}'`)
        return partID[0].partID
    }
    catch(err){
        console.log(err)
        return false
    }
}

我返回 false 是因为如果有 try catch 块时第二个异步函数中出现错误,第一个异步函数不会抛出错误消息

标签: javascriptnode.js

解决方案


这些是一些使用技巧try...catch

我们可以try...catch用于同步代码。

我们可以使用try...catch(结合async函数)和.catch()方法来处理异步代码的错误。

await在 try 块中返回一个 Promise 时,如果您希望该try...catch块捕获错误,请确保它。


推荐阅读