> Как работает цепочка Promise.then.catch.then.catch.then в JavaScript и когда выполняется последний then (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Альфа-банк, VK, Kodix, LoyaltyLabs
Стек: JavaScript
> Пример ответа
Цепочка Promise.then.catch.then.catch.then строится на последовательной обработке результатов и ошибок. Каждый метод возвращает новый промис, позволяя выстраивать цепочку.
-
Promise- начальный промис, который может завершиться успешно (resolve) или с ошибкой (reject). -
Первый
.thenвыполняется, если предыдущий промис разрешился успешно. Он получает значение и возвращает новое значение (или промис). Если в этом.thenвозникает ошибка (или возвращается rejected промис), управление переходит к следующему.catch. -
Первый
.catchперехватывает ошибки, возникшие в предыдущем.thenили в исходном промисе. Если ошибки не было,.catchпропускается. Он может вернуть значение (тогда цепочка продолжается как успешная) или выбросить новую ошибку. -
Второй
.thenвыполняется, если предыдущий.catchзавершился успешно (т.е. не выбросил ошибку). Если же.catchсам упал с ошибкой, этот.thenпропускается. -
Второй
.catchловит ошибки из второго.thenили из предыдущего.catch, если тот выбросил ошибку. -
Последний
.thenвыполняется только в том случае, если все предыдущие шаги (включая второй.catch) завершились успешно. Если на любом этапе возникает необработанная ошибка, последний.thenне выполняется - управление уйдёт в глобальный обработчик или останется неперехваченным.
Пример:
JAVASCRIPTPromise.resolve(1).then(val => { throw new Error('ошибка'); }).catch(err => { console.log('поймано'); return 2; }).then(val => console.log(val)) // выведет 2.catch(err => console.log('не выполнится')).then(() => console.log('последний then выполнится'));
Если бы второй .catch выбросил ошибку, последний .then не сработал бы. Таким образом, последний .then выполняется только при отсутствии необработанных ошибок на всём пути цепочки.
> Похожие задачи по frontend
Как работает Promise.all в JavaScript
Как получить все ключи объекта в JavaScript
Что такое всплытие и погружение событий в JavaScript и что происходит раньше
Что такое debounce и как он работает в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью