javascript - 为什么try catch不catch await函数错误
问题描述
我知道如果我们有这样的 try catch 设置:
try{
runSyncFunction()
}
catch(err){
cosole.log(err)
}
如果在runSyncFunction
catch 中有错误,就会触发错误。
根据我的理解,如果我们尝试像这样捕获设置:
try{
runAsyncFunction()
}
catch(err){
cosole.log(err)
}
如果runAsyncFunction
catch 中有错误,则不会触发错误,因为该函数稍后运行。
我不明白为什么当我们使用 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 块时第二个异步函数中出现错误,第一个异步函数不会抛出错误消息
解决方案
这些是一些使用技巧try...catch
我们可以
try...catch
用于同步代码。
我们可以使用
try...catch
(结合async
函数)和.catch()
方法来处理异步代码的错误。
await
在 try 块中返回一个 Promise 时,如果您希望该try...catch
块捕获错误,请确保它。