【问题标题】:Do I need to explicitly catch and re-throw exceptions when awaiting an asynchronous function?等待异步函数时是否需要显式捕获并重新抛出异常?
【发布时间】:2017-07-21 14:04:11
【问题描述】:

如果我有

async function bar() {
  throw 'bar';
}

有什么区别

async function foo() {
  await bar();
}

async function foo() {
  try {
    await bar();
  } catch(e) {
    throw e;
  }
}

我听说我需要在异步函数中显式捕获并重新抛出异常,但我认为catch(e) { throw e; } 是多余的(如果在再次抛出异常之前没有进行额外的处理或日志记录)。我相信在其他一些语言中就是这样。 JavaScript 呢?

【问题讨论】:

  • 您能否附上您说要这样做的来源?​​
  • @4castle 这是我团队的另一位开发人员,但他引用了this article。我没有看到这篇文章有什么帮助。
  • 我看不到文章在哪里说要重新抛出异常。是的,像这样重新抛出没有任何作用。
  • @4castle 我也没有。以下是他的原话:“您需要在每个级别显式捕获异常,否则等待的承诺将吞噬错误。”
  • 我不知道他从哪里得到的信息,但这是错误的。它不会吞下错误,而是返回一个被拒绝的承诺。

标签: javascript asynchronous exception-handling


【解决方案1】:

您不必接住再扔。如果表达式是拒绝的承诺,则表达式将抛出拒绝的值。

Source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2020-02-13
    • 2012-06-28
    • 2016-01-19
    • 2013-10-04
    • 2014-12-01
    • 2010-10-03
    相关资源
    最近更新 更多