Результат выполнения цепочки Promise в консоли

Сначала выведется 2, затем 1. Первый catch обрабатывает брошенное значение 2 и восстанавливает успешную цепочку; следующий then возвращает Promise.resolve(1).

Короткий ответ

Что ответить на собеседовании

Сначала выведется 2, затем 1. Первый catch обрабатывает брошенное значение 2 и восстанавливает успешную цепочку; следующий then возвращает Promise.resolve(1).

Подробный разбор

Ответ с пояснениями

Условие

Какой вывод появится в консоли при выполнении следующего кода?

Promise.resolve(1)
  .then(x => x + 1)
  .then(x => { throw x })
  .then(x => console.log(x))
  .catch(err => console.log(err))
  .then(x => Promise.resolve(1))
  .catch(err => console.log(err))
  .then(x => console.log(x));

Ответ

Сначала выведется 2, затем 1. Первый catch обрабатывает брошенное значение 2 и восстанавливает успешную цепочку; следующий then возвращает Promise.resolve(1).

Первый then преобразует 1 в 2. Второй выбрасывает 2, поэтому обработчик console.log сразу после него пропускается. catch печатает ошибку 2 и сам возвращает undefined.

Следующий then игнорирует входное undefined и возвращает успешно завершённый Promise со значением 1. Второй catch не нужен и пропускается; последний then печатает 1. Выброшенное значение не обязательно является объектом Error, хотя в рабочем коде Error удобнее для диагностики.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее