Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
5
Почему внешний try/catch не ловит ошибку, брошенную внутри Promise
Условие задачи
Разъясните, почему исключение, возникшее внутри тела Promise, не перехватывается внешним блоком try/catch.
try {
new Promise((resolve, reject) => {
throw "asda";
});
} catch (e) {
console.log("Error", e);
}
- Внутри конструктора
Promiseлюбые синхронные ошибки автоматически преобразуются в отклонённый промис, а не пробрасываются наружу как обычные исключения. - Блок
try/catchможет отловить только ошибки, которые выбрасываются синхронно в текущем стеке вызовов. Ошибка, превратившаяся в отклонение промиса, будет обработана только через методы.catch,awaitсtry/catchвнутри асинхронной функции или обработчик отклонения при создании промиса. - Чтобы перехватить такую ошибку, нужно добавить обработчик отклонения:
new Promise((resolve, reject) => {
throw "asda";
}).catch(err => console.log("Caught", err));
или использовать async/await:
(async () => {
try {
await new Promise((resolve, reject) => {
throw "asda";
});
} catch (e) {
console.log("Caught", e);
}
})();