Консоль выведет A, F, B. Возврат объекта Error не отклоняет Promise; для отклонения нужно выбросить ошибку или вернуть rejected Promise.
Что возвращают catch и finally в цепочке 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 не получает значение результата аргументом.