![](/img/trans.png)
[英]Why is try {} .. catch() not working with async/await function?
[英]Why does try catch not catch await function errors
我知道如果我們有這樣的 try catch 設置:
try{
runSyncFunction()
}
catch(err){
cosole.log(err)
}
如果runSyncFunction
中有錯誤,將觸發 catch 錯誤。
根據我的理解,如果我們嘗試像這樣捕獲設置:
try{
runAsyncFunction()
}
catch(err){
cosole.log(err)
}
如果runAsyncFunction
中出現錯誤,則不會觸發 catch 錯誤,因為 function 稍后會運行。
我不明白為什么當我們使用 await 時不會觸發 catch 錯誤:
try{
await runAsyncFunction()
}
catch(err){
cosole.log(err)
}
如果這次異步 function 出現錯誤,並且由於 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)
}
})
第二個 function:
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 是因為第一個異步 function 不會在第二個異步 function 出現錯誤時拋出錯誤消息
這些是使用try...catch
的一些技巧
我們可以使用
try...catch
進行同步代碼。
我們可以使用
try...catch
(結合async
函數)和.catch()
方法來處理異步代碼的錯誤。
在 try 塊中返回 promise 時,如果您希望
try...catch
塊捕獲錯誤,請確保await
它。
您的第二個函數 catch 塊正在解析被拒絕的 promise。 因此,您的第一個 function 沒有發現錯誤。 在您的第二個函數 catch 塊中使用return Promise.reject(err)
,以便您的第一個 function 可以捕獲錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.