Как finally влияет на результат и порядок Promise-цепочки?

Сначала sync, затем cleanup, затем 7. Finally выполняет завершающее действие и в этом случае пропускает исходное успешное значение дальше, не заменяя его на undefined.

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

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

Сначала sync, затем cleanup, затем 7. Finally выполняет завершающее действие и в этом случае пропускает исходное успешное значение дальше, не заменяя его на undefined.

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

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

Условие

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

Promise.resolve(7)
  .finally(() => console.log('cleanup'))
  .then(value => console.log(value));
console.log('sync');

Callback finally не бросает ошибку и ничего не возвращает.

Ответ

Сначала sync, затем cleanup, затем 7. Finally выполняет завершающее действие и в этом случае пропускает исходное успешное значение дальше, не заменяя его на undefined.

Это отличает finally от then, возвращающего undefined: обычный then изменил бы значение следующего звена. Но если finally бросит исключение или вернёт отклонённый Promise, итоговая цепочка станет отклонённой. Поэтому в cleanup не стоит незаметно маскировать исходный результат новой ошибкой без осознанной политики обработки.

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

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

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

Подробнее