当前位置: 首页 > 知识库问答 >
问题:

为什么try-catch-not-catch-await函数出现错误

孔欣可
2023-03-14

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

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

如果runSyncFunction中存在错误,捕获错误将触发。

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

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

如果runAsyncFunction中存在错误,则不会触发捕获错误,因为该函数将在以后运行。

我不明白的是,当我们使用wait时,为什么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块时,如果第二个异步函数中存在错误,则第一个异步函数不会抛出错误消息

共有1个答案

公孙阳文
2023-03-14

以下是一些使用尝试的提示。。。捕获

我们可以用try... catch来表示同步代码。

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

在try块中返回promise时,如果希望尝试,请确保等待它。。。catch块以捕获错误。

 类似资料:
  • 不管你多么精通编程,有时我们的脚本总还是会出现错误。可能是因为我们的编写出错,或是与预期不同的用户输入,或是错误的服务端响应以及其他数千种原因。 通常,如果发生错误,脚本就会“死亡”(立即停止),并在控制台将错误打印出来。 但是有一种语法结构 try..catch,它使我们可以“捕获(catch)”错误,因此脚本可以执行更合理的操作,而不是死掉。 “try…catch” 语法 try..catch

  • 我正在尝试捕获caller方法中的IllegalAccessException。但它抓不到它。而是给出了一个错误。

  • 问题内容: 我正在审查一些新代码。该程序仅具有try和finally块。由于不包含catch块,如果try块遇到异常或任何可抛出的异常,它将如何工作?它是否直接进入了finally块? 问题答案: 如果try块中的任何代码都可以引发已检查的异常,则它必须出现在方法签名的throws子句中。如果引发了未经检查的异常,则该异常会冒泡退出方法。 无论是否引发异常,都始终执行finally块。

  • 问题内容: 我最初从大学开始编程,然后学习了vb.net。现在,我决定转向Java并进行一些查询。在vb中,try catch语句的布局如下 但是在Java网站(https://docs.oracle.com/javase/tutorial/essential/exceptions/putItTogether.html)中,我发现在Java中,您使用了两个陷阱,如下所示: 我希望有人能够解释为什么

  • 问题内容: 我读到try-with-resources 中的块是可选的。我试图在try-with- resources块中创建一个对象,没有后续块,只是从eclipse中获取编译器错误:“ 自动调用引发了未处理的异常类型。” 由于可以在try-with- resources中使用的每个资源都实现了,因此在调用该方法时可能会引发异常,因此我不明白该子句是可选的,因为它不允许我跳过从中捕获异常的过程。

  • 例如: 将在Kotlin中编译,但在Java中会出现编译器错误。为什么?