Выведется finally undefined. catch не выполнится: возврат new Error создаёт успешное значение цепочки, а не отклоняет Promise.
Объясните поведение следующего кода JavaScript 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.