> Попадем ли в catch при ошибке в асинхронном вызове внутри try в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Kaspersky
Стек: JavaScript
> Пример ответа
Всё зависит от того, как именно организован асинхронный вызов.
Если внутри try находится обычный асинхронный код (например, setTimeout, fetch, Promise без await), то ошибка, возникшая в асинхронной callback-функции или в цепочке промисов, не будет поймана блоком catch. Это происходит потому, что try/catch работает синхронно - он уже завершился к моменту, когда асинхронная операция выполняется.
Пример, когда не попадём:
JAVASCRIPTtry {setTimeout(() => {throw new Error('Ошибка');}, 1000);} catch (e) {console.log('Не будет выполнено');}
Если же использовать async/await с await внутри try, то ошибка от отклонённого промиса будет поймана:
JAVASCRIPTasync function test() {try {await fetch('https://несуществующий-url');} catch (e) {console.log('Попадём сюда');}}
Также можно поймать ошибку, если явно обработать промис через .catch():
JAVASCRIPTtry {fetch('...').catch(err => console.log('Поймано'));} catch (e) {// сюда не попадём, если ошибка возникнет внутри fetch}
Ключевой вывод: try/catch ловит только синхронные ошибки и ошибки от await внутри async функций. Для асинхронных колбэков или промисов без await нужно использовать .catch() или оборачивать в async/await.
> Похожие задачи по frontend
В чем разница XML и JSON
Что такое генераторы в JavaScript и для чего они используются
Какие значения являются falsy в JavaScript
Создавал ли ты кастомные события мыши во frontend
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью