Что возвращают catch и finally в цепочке Promise

Консоль выведет A, F, B. Возврат объекта Error не отклоняет Promise; для отклонения нужно выбросить ошибку или вернуть rejected Promise.

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

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

Консоль выведет A, F, B. Возврат объекта Error не отклоняет Promise; для отклонения нужно выбросить ошибку или вернуть rejected Promise.

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

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

Условие

Определите вывод:

Promise.resolve().then(() => { throw new Error('A'); })
  .catch(e => { console.log(e.message); return new Error('B'); })
  .finally(() => console.log('F'))
  .then(value => console.log(value.message));

Ответ

Консоль выведет A, F, B. Возврат объекта Error не отклоняет Promise; для отклонения нужно выбросить ошибку или вернуть rejected Promise.

Первый throw переводит цепочку в отклонённое состояние. catch обрабатывает его и возвращает обычное значение — объект ошибки B. Успешный finally пропускает это значение дальше, поэтому вызывается следующий then. Если внутри finally выбросить другую ошибку, она заменит прежний результат цепочки. Сам finally не получает значение результата аргументом.

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

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

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

Подробнее