Объясните поведение следующего кода JavaScript Promise и что будет выведено в консоль:

Выведется finally undefined. catch не выполнится: возврат new Error создаёт успешное значение цепочки, а не отклоняет Promise.

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

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

Выведется finally undefined. catch не выполнится: возврат new Error создаёт успешное значение цепочки, а не отклоняет Promise.

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

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

Условие

Объясните поведение следующего кода JavaScript Promise и что будет выведено в консоль:

let promise = new Promise((resolve, reject) => {
  resolve("ok");
})

promise
  .then(result => `${result} one`)
  .then(result => `${result} two`)
  .then(result => {return new Error('error')})
  .finally((result) => console.log('finally', result))
  .catch(err => console.error(err.message))

Ответ

Выведется finally undefined. catch не выполнится: возврат new Error создаёт успешное значение цепочки, а не отклоняет Promise.

Первые then формируют строки «ok one» и «ok one two». Следующий обработчик возвращает объект Error как обычный результат. finally не получает результат или ошибку аргументом и сохраняет прежний исход, если сам не бросит исключение. Для перехода в catch нужно throw new Error('error') либо вернуть rejected Promise.

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

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

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

Подробнее