Проверяет понимание механизмов обработки ошибок в асинхронном JavaScript с промисами и async/await, что критично для надёжного кода.
Асинхронный код в JavaScript строится на промисах, и ошибки в нём не всплывают как обычные исключения — их нужно явно перехватывать. Промис может находиться в состоянии rejected, и если это состояние никто не обработает, среда сообщит об unhandledRejection, что часто приводит к падению Node.js или появлению ошибок в консоли браузера.
Классический способ — метод .catch(), который принимает колбэк с ошибкой. Также можно передать второй аргумент в .then(onFulfilled, onRejected), но это менее удобно, так как не покрывает ошибки, возникшие внутри первого колбэка.
fetch('/api/user')
.then(res => {
if (!res.ok) throw new Error('HTTP ' + res.status);
return res.json();
})
.then(data => console.log(data))
.catch(err => console.error('Ошибка:', err.message))
.finally(() => console.log('Запрос завершён'));Синтаксис async/await делает асинхронный код похожим на синхронный. Если промис отклонён, await выбрасывает исключение, поэтому используется обычный try/catch. Это позволяет обрабатывать ошибки на нескольких уровнях и комбинировать с синхронным кодом.
async function loadUser(id) {
try {
const res = await fetch('/api/user/' + id);
if (!res.ok) throw new Error('HTTP ' + res.status);
return await res.json();
} catch (err) {
console.error('Не удалось загрузить:', err.message);
throw err; // пробрасываем дальше, если нужно
} finally {
console.log('Запрос завершён');
}
}setTimeout или колбэков не попадают в try/catch вокруг await.window.onunhandledrejection или process.on('unhandledRejection').Promise.allSettled, чтобы одна ошибка не отменяла остальные.try можно использовать несколько await, и любая ошибка перейдёт в catch.Итог: для промисов используйте .catch(), для async/await — try/catch; всегда предусматривайте обработку отклонений, чтобы избежать неожиданных падений и упростить отладку асинхронного кода.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию