Порядок: 1, Promise, 4, timeOut, 777, then2, timeOut2, then1. Первый then только ставит таймер и не возвращает Promise ожидания этого таймера.
Определение порядка вывода в консоль
Порядок: 1, Promise, 4, timeOut, 777, then2, timeOut2, then1. Первый then только ставит таймер и не возвращает Promise ожидания этого таймера.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Укажите, какой порядок будет напечатан в консоль при выполнении следующего кода:
setTimeout(() => {
console.log("timeOut");
}, 0);
console.log(1);
new Promise(resolve => {
console.log("Promise");
setTimeout(() => {
console.log("777");
resolve();
}, 0);
}).then(() => {
setTimeout(() => {
console.log("then1");
}, 0);
}).then(() => {
console.log("then2");
});
console.log(4);
setTimeout(() => {
console.log("timeOut2");
}, 0);
Ответ
Порядок: 1, Promise, 4, timeOut, 777, then2, timeOut2, then1. Первый then только ставит таймер и не возвращает Promise ожидания этого таймера.
После 777 resolve запускает цепочку микрозадач: первый then планирует then1, следующий сразу печатает then2. Таймер timeOut2 был создан раньше нового таймера then1 и выполнится перед ним. Нулевая задержка не делает обработчик синхронным.