Порядок вывода: 1, 3, 4, 5, 7, 6, 8, 2. Синхронный код завершается первым, затем выполняются микрозадачи, затем callback таймера.
Определение последовательности вывода в console.log (пример 66)
Порядок вывода: 1, 3, 4, 5, 7, 6, 8, 2. Синхронный код завершается первым, затем выполняются микрозадачи, затем callback таймера.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Установите порядок, в котором будут напечатаны строки в консоль.
console.log('1');
setTimeout(() => {
console.log('2');
});
new Promise((res, rej) => {
console.log('3');
res();
}).then(() => {
console.log('4');
});
Promise.resolve().then(() => {
console.log('5');
}).then(() => {
console.log('6');
});
Promise.resolve().then(() => {
console.log('7');
}).then(() => {
console.log('8');
});
Ответ
Порядок вывода: 1, 3, 4, 5, 7, 6, 8, 2. Синхронный код завершается первым, затем выполняются микрозадачи, затем callback таймера.
Исполнитель new Promise сразу печатает 3. После основного стека очередь содержит обработчики 4, 5 и 7. Во время 5 добавляется 6, во время 7 — 8; они идут после уже стоявших микрозадач. Нулевая задержка таймера не даёт ему приоритет над ними.