Порядок вывода: 1, 6, 3, 5, 2, 4, 7. Catch отклонённого Promise и then выполненного Promise являются микрозадачами.
Определение порядка вывода в консоль (пример 36)
Порядок вывода: 1, 6, 3, 5, 2, 4, 7. Catch отклонённого Promise и then выполненного Promise являются микрозадачами.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Укажите, какой порядок будет выведен в консоль при выполнении следующего кода:
console.log(1);
setTimeout(() => console.log(2));
Promise.reject(3).catch(console.log);
new Promise(resolve => setTimeout(resolve)).then(() => console.log(4));
Promise.resolve(5).then(console.log);
console.log(6);
setTimeout(() => console.log(7),0);
Ответ
Порядок вывода: 1, 6, 3, 5, 2, 4, 7. Catch отклонённого Promise и then выполненного Promise являются микрозадачами.
После синхронных 1 и 6 выполняются 3 и 5. Первый таймер печатает 2, следующий разрешает Promise без своего сообщения, и его then печатает 4 перед последним таймером с 7. Отсутствие явной задержки у setTimeout не делает его синхронным.