Порядок вывода: 1, 6, 3, 7. Обе цепочки проходят через отдельные реакции Promise; пропуск неподходящего обработчика тоже продвигает цепочку через микрозадачи.
Порядок вывода в консоль (пример 57)
Порядок вывода: 1, 6, 3, 7. Обе цепочки проходят через отдельные реакции Promise; пропуск неподходящего обработчика тоже продвигает цепочку через микрозадачи.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, в какой последовательности появятся сообщения в консоли при выполнении следующего кода:
Promise.resolve(1)
.then(x => console.log(1))
.catch(x => console.log(2))
.then(x => console.log(3))
Promise.reject(2)
.then(x => console.log(4))
.catch(x => console.log(6))
.then(x => console.log(7))
Ответ
Порядок вывода: 1, 6, 3, 7. Обе цепочки проходят через отдельные реакции Promise; пропуск неподходящего обработчика тоже продвигает цепочку через микрозадачи.
В первой цепочке fulfilled-handler печатает 1 и возвращает undefined. Следующий catch пропускается, передавая успешное состояние к then с 3.
Во второй цепочке первый then не обрабатывает rejection: ошибка передаётся дальше. catch печатает 6, возвращает undefined и восстанавливает fulfilled-состояние, после чего then печатает 7. Из-за чередования очередей двух цепочек 6 появляется до 3. Числа 2 и 4 не выводятся.