Как обрабатывать исключения?
Ошибки и отладка
Исключения обрабатывают через `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).