簡體   English   中英

為什么try catch not catch等待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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM