Сначала выведется f, затем abd. Первый catch превращает rejection 'a' в успешное значение 'ab', поэтому второй catch пропускается.
Что окажется в консоли (пример 29)
Сначала выведется f, затем abd. Первый catch превращает rejection 'a' в успешное значение 'ab', поэтому второй catch пропускается.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой текст появится в консоли при выполнении следующего кода:
Promise.reject("a")
.catch((val) => val + "b")
.catch((val) => val + "c")
.then((val) => val + "d")
.then((val) => console.log(val));
console.log("f");
Ответ
Сначала выведется f, затем abd. Первый catch превращает rejection 'a' в успешное значение 'ab', поэтому второй catch пропускается.
Первый обработчик ошибки возвращает обычную строку val + 'b', а не бросает исключение. Следующий Promise цепочки становится fulfilled. Второй catch предназначен только для rejected-состояния и не добавляет c.
then добавляет d, а последний then выводит abd. Синхронный console.log('f') выполняется раньше любых обработчиков Promise, независимо от того, что расположен ниже цепочки в исходном тексте.