05. Error Handling

Существует несколько подходов к обработкам ошибок внутри асинхронных функций:

  • try-catch,

  • Использовать инструментарий Promise (p.then(), p.catch(), Promise.try()),

  • Использовать утилиты, что бы в результате await вызова возвращать [data, err].

try-catch

Каждый вызов await, который может выбрасывать исключение необходимо оборачивать в catch:

async function asyncFunc() {
  try {
    await otherAsyncFunc();
  } catch (err) {
    console.error(err);
  }
}

// Equivalent to:
function asyncFunc() {
  return otherAsyncFunc().catch(err => {
    console.error(err);
  });
}

Error handling with Promises

При вызове await P можно навешивать различные обработчики на P и тем самым использовать семантику then() и catch() вместе с await:

Structured return value

Можно перенять подход свойственный go где в результате вызова операции возвращается data, err написав функцию:

Тогда обработка асинхронного кода будет иметь вид:

У этого подхода есть преимущество в том, что на деструкции можно использовать значения по умолчанию:

Last updated

Was this helpful?