【问题标题】:Javascript Try Catch vs Catch chainJavascript Try Catch 与 Catch 链
【发布时间】:2020-03-13 10:59:11
【问题描述】:

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

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

我不得不把它改成:

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

找不到合适的解释,有没有 JS 巫师可以启发 JS 农民?

【问题讨论】:

    标签: javascript error-handling promise try-catch


    【解决方案1】:

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

    这是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);
        }
    }
    

    【讨论】:

    • 谢谢,这个解释详细而清晰——确实是同步抛出了错误
    • 是的,谢谢,由于 10 分钟的宽限期,我之前无法接受
    • @Luffy - 很酷,很高兴我们得到了解释。
    猜你喜欢
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多