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

Сравни способы перехвата ошибок в WEB и объясни, когда выбирать каждый вариант.

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

Способы перехвата ошибок в вебе: `try/catch` (sync и async/await), `.catch()` (промисы), глобальные `window.onerror`/`unhandledrejection`, React Error Boundary, сервисы мониторинга. Выбор — по контексту.

Способы

try/catch

Синхронный код и async/await:

try {
  const data = await fetchData();
} catch (e) { handleError(e); }
  • Когда: локальная обработка, async/await.
  • Не ловит ошибки в асинхронных колбэках (setTimeout) и в другом стеке.

.catch() у промисов

fetchData().then(process).catch(handleError);
  • Когда: промис-цепочки.

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

window.addEventListener('error', handler);              // sync ошибки, ресурсы
window.addEventListener('unhandledrejection', handler); // необработанные промисы
  • Когда: ловля всего необработанного, логирование в проде.

React Error Boundary

Ловит ошибки рендера дочерних компонентов, показывает fallback:

componentDidCatch(error, info) { log(error); }
  • Когда: ошибки рендера React.
  • Не ловит: обработчики событий, async, SSR.

Сервисы мониторинга

Sentry и подобные — сбор ошибок в проде со стектрейсами и контекстом.

  • Когда: прод-мониторинг.

Как выбирать

  • Локально/async → try/catch.
  • Промисы → .catch().
  • Всё необработанное, логи → глобальные обработчики.
  • Рендер React → Error Boundary.
  • Прод → Sentry.

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

Перехват ошибок: try/catch (sync, async/await — не ловит колбэки setTimeout), .catch() (промисы), глобальные error/unhandledrejection (всё необработанное, логи), React Error Boundary (ошибки рендера, не обработчиков/async), Sentry (прод-мониторинг). Выбор по контексту; комбинируют для полного покрытия.

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