Консоль выведет 5, 2, 6, 3. Обработчики 1 и 7 не выполняются: исходный Promise отклонён, а обе catch-ветви восстанавливают успешное продолжение.
2. В каком порядке выведутся значения?
Консоль выведет 5, 2, 6, 3. Обработчики 1 и 7 не выполняются: исходный Promise отклонён, а обе catch-ветви восстанавливают успешное продолжение.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
- В каком порядке выведутся значения?
const q = Promise.reject();
q.then(() => console.log(1))
.catch(() => console.log(2))
.then(() => console.log(3));
q.catch(() => console.log(5))
.then(() => console.log(6))
.catch(() => console.log(7));
Ответ
Консоль выведет 5, 2, 6, 3. Обработчики 1 и 7 не выполняются: исходный Promise отклонён, а обе catch-ветви восстанавливают успешное продолжение.
Сначала ставятся реакции двух ветвей q. Первая реакция лишь переносит отказ через then без onRejected, а вторая выводит 5. Затем готов первый catch с 2 и продолжение второй ветви с 6. После успешного catch первой ветви выполняется then с 3. Последний catch второй ветви пропускается, так как ошибки уже нет.