PassFront
  1. PassFront
  2. База знаний
  3. Ошибки и отладка

Как обрабатывать исключения?

Ошибки и отладка

Исключения обрабатывают через `try/catch/finally`, а асинхронные — через `try/catch` с `async/await` или `.catch()` у промисов. Плюс глобальные обработчики для необработанного.

try/catch/finally

try {
  riskyOperation();       // код, который может кинуть
} catch (error) {
  console.error(error.message); // обработка
} finally {
  cleanup();              // выполнится в любом случае
}

Асинхронные исключения

async/await

try {
  const data = await fetchData();
} catch (error) {
  handleError(error);     // ловит reject
}

Промисы

fetchData().then(process).catch(handleError);

Обычный try/catch не ловит ошибки в асинхронных колбэках (setTimeout) — их обрабатывают внутри.

Свои ошибки

class ValidationError extends Error {
  constructor(message) { super(message); this.name = 'ValidationError'; }
}
throw new ValidationError('Неверный email');

Разделять типы ошибок для точной обработки.

Глобальные обработчики

window.addEventListener('error', handler);
window.addEventListener('unhandledrejection', handler); // необработанные промисы

Хорошие практики

  • Не «глотать» ошибки молча.
  • Ловить конкретно, а не всё подряд без разбора.
  • Логировать детали, показывать пользователю понятное сообщение.
  • В проде — мониторинг (Sentry).

Коротко для собеседования

Исключения — try/catch/finally; асинхронные — try/catch с await или .catch() у промисов; try/catch не ловит ошибки в setTimeout-колбэках. Создают свои классы ошибок, ловят необработанное через window.error/unhandledrejection. Не глотать ошибки, логировать, мониторить (Sentry).

Другие вопросы раздела