Что выведет код 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 ошибок.