JavaScript中的Try Catch与Catch链

3

最近我遇到了一个Javascript问题,当出现异常时无法捕获错误并导致崩溃。

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

我不得不将其更改为:

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

找不到一个好的解释,有没有JS大师能够启发一下JS农民呢?

1个回答

8
如果 funcReturnPromise() 可以同步抛出异常(返回 Promise 的函数通常不应该这样做),那么您需要通过 try/catch 来捕获同步异常,就像您在使用普通的 .then() 时发现的那样。
这是一个使用 async 函数可以帮助您的场景。例如,如果您将 funcReturnPromise 声明为 async,那么它抛出的同步异常将自动变成一个被拒绝的 Promise,调用者将不会暴露于同步异常中。
或者,如果调用者 (在这里是您的代码) 使用 await,则可以使用相同的 try/catch 捕获同步异常和被拒绝的 Promise。
因此,例如,您可以这样做:
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);
    }
}

谢谢,这个解释详细明了——错误确实是同步抛出的。 - Luffy
是的,谢谢。之前由于10分钟的宽限期我无法接受它。 - Luffy
@Luffy - 很酷,很高兴我们都讲清楚了。 - jfriend00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接