Сначала sync, затем cleanup, затем 7. Finally выполняет завершающее действие и в этом случае пропускает исходное успешное значение дальше, не заменяя его на undefined.
Как finally влияет на результат и порядок Promise-цепочки?
Сначала 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 не стоит незаметно маскировать исходный результат новой ошибкой без осознанной политики обработки.