Сравни способы перехвата ошибок в 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 (прод-мониторинг). Выбор по контексту; комбинируют для полного покрытия.