在等待异步函数时,是否需要显式捕获并重新抛出异常?

int*_*tor 6 javascript asynchronous exception

如果我有

async function bar() {
  throw 'bar';
}
Run Code Online (Sandbox Code Playgroud)

有什么区别

async function foo() {
  await bar();
}
Run Code Online (Sandbox Code Playgroud)

async function foo() {
  try {
    await bar();
  } catch(e) {
    throw e;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Aus*_*tio 7

您不必接住并重新抛出。如果表达式是拒绝的 Promise,则表达式将抛出拒绝的值。

来源