Javascript尝试捕获与捕获链

时间:2019-11-18 05:21:00

标签: javascript error-handling promise try-catch

我最近遇到了一个Javascript问题,它捕获错误并因此在引发异常时崩溃。

  • funcReturnPromise().then().catch()

我不得不将其更改为:

try {
  funcReturnPromise().then()
} catch (e) {
  ...
}

找不到合适的解释,有没有可用的JS向导来启发JS农民?

1 个答案:

答案 0 :(得分:3)

如果funcReturnPromise()可以同步抛出(返回promise的函数通常永远不会执行),那么您就必须像使用常规.then()时发现的那样,使用try / catch捕获该同步异常。 / p>

这是async函数可以帮助您的地方。例如,如果您将funcReturnPromise声明为async,则它引发的同步异常将自动成为被拒绝的承诺,并且调用方永远不会暴露于同步异常。

或者,如果调用者(此处的代码)使用await,则可以使用相同的try/catch捕获同步异常和拒绝的诺言。

例如,您可以执行以下操作:

async function myFunc()
    try {
      let result = await funcReturnPromise();
      console.log(result);
    } catch (e) {
        // this catches both a rejected promise AND
        // a synchronously thrown exception
        console.log(e);
    }
}