javascript - Musím explicitne zachytávať a znovu hádzať výnimky pri čakaní na asynchrónnu funkciu?


Ak mám

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

Aký je rozdiel medzi

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

a

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

Počul som, že je potrebné explicitne zachytávať a znovu hádzať výnimky vo vnútri asynchrónnych funkcií, ale predpokladal som, že catch(e) { throw e; } je zbytočné (ak sa pred opätovným hodením výnimky nevykonáva žiadne ďalšie spracovanie alebo zaznamenávanie). Verím, že tak je to v niektorých iných jazykoch; ako to je v JavaScripte?

Odpoveď č. 1

Nemusíte chytať a znovu hádzať. Ak je výraz sľubom, ktorý sa odmietne, výraz vyhodí hodnotu odmietnutia.

Zdroj