> Как работает цепочка 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 не выполняется - управление уйдёт в глобальный обработчик или останется неперехваченным.

Пример:

JAVASCRIPT
Promise.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 выполняется только при отсутствии необработанных ошибок на всём пути цепочки.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью