Проверяет понимание обработки ошибок в асинхронных функциях JavaScript и разницы между синхронными и асинхронными исключениями.
Асинхронная функция в JavaScript всегда возвращает Promise. Когда внутри неё выбрасывается исключение, оно не «вылетает» наружу синхронно, а превращается в отклонённый (rejected) Promise. Если такой Promise никто не обрабатывает, возникает unhandled rejection.
async function fetchData() {
throw new Error('Network error');
}
// Плохо: ошибка не поймана
try {
fetchData(); // вернёт rejected Promise
} catch (e) {
console.log('Не сработает');
}
// Хорошо: обработка через await
try {
await fetchData();
} catch (e) {
console.log('Поймали:', e.message);
}
// Или через .catch()
fetchData().catch(e => console.log('Поймали:', e.message));try/catch ловит только синхронные исключения. Вызов async-функции синхронно завершается успешно — он просто возвращает Promise. Ошибка возникает позже, в микрозадаче, когда try/catch уже завершён.
Итог: всегда обрабатывайте Promise от async-функций через await в try/catch или через .catch(), иначе получите unhandled rejection и потенциальное падение приложения.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию