Что выведет код Senior Event loop обновлено

Вложенные таймеры и промисы

Вопрос

Что выведет код? По строке на каждый вывод.

const log = console.log;

setTimeout(() => {
  log(1);
  Promise.resolve(2).then(log);
});

Promise.resolve().then(() => {
  log(3);
  setTimeout(() => log(4));
});

log(5);

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 5, 3, 1, 2, 4. Почему так Синхронный код печатает 5.

Что выведет

5
3
1
2
4

Разбор

Почему так

Синхронный код печатает 5. Затем микрозадача печатает 3 и ставит таймер в конец очереди макрозадач. Первый таймер печатает 1 и ставит микрозадачу, которая выполняется сразу после него, до следующего таймера. Последним идёт таймер с 4. Ключевая деталь - микрозадачи выполняются после каждой макрозадачи, а не только после синхронного кода.

Вывод

5
3
1
2
4

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме