Javascript Try Catch 与 Catch 链

Luf*_*ffy 3 javascript error-handling try-catch promise

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

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

我不得不将其更改为:

try {
  funcReturnPromise().then()
} catch (e) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

找不到合适的解释,有 JS 向导可以启发 JS 农民吗?

jfr*_*d00 8

如果funcReturnPromise()可以同步抛出(返回 Promise 的函数通常不应该这样做),那么您必须使用 try/catch 捕获该同步异常,正如您在使用常规.then().

这是函数可以为您提供帮助的地方async。例如,如果您声明funcReturnPromiseasync,那么它抛出的同步异常将自动成为拒绝的承诺,并且调用者永远不会遇到同步异常。

或者,如果调用者(此处的代码)使用await,那么您可以使用相同的.catch捕获同步异常和拒绝的承诺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);
    }
}
Run Code Online (Sandbox Code Playgroud)