【发布时间】:2020-07-02 16:56:59
【问题描述】:
我知道如果我们有这样的 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 块时第二个异步函数中出现错误,第一个异步函数不会抛出错误消息
【问题讨论】:
-
我相信在这种情况下应该会发现错误......你确定你正确使用了异步等待吗?
-
我同意 - 你能证明你的观点吗?如果等待的 Promise 抛出错误,则应该捕获错误。如果它自己捕获了错误并且没有抛出,所以它解决了,你不会看到 catch 块被调用
-
您介意与我们分享该功能的实现吗?
-
我在第二个异步函数中尝试了捕获块。这就是第一次捕获不会触发的原因吗?
-
提供第二个异步函数。
标签: javascript node.js