Ответ на викторину

Что выведет этот код?

console.log(1);
setTimeout(() => console.log(2), 0);
Promise.resolve()
.then(() => {
console.log(3);
return Promise.resolve();
})
.then(() => {
console.log(4);
});
async function run() {
console.log(5);
await null;
console.log(6);
}
run();
console.log(7);

Правильный ответ: 1 5 7 3 4 6 2

да, тут есть подвох — два варианта выглядят одинаково, но это проверка внимательности, многие начинают сомневаться и менять ответ

Где тут мясо:
await null → это сразу microtask, как Promise.resolve()
первый .then → кладёт следующий .then тоже в microtask queue
порядок микротасок сохраняется по очереди добавления
setTimeout → всегда в конце (macrotask)

Короткий разбор:
1 → sync
5 → sync (внутри async)
7 → sync
3 → первый then
4 → второй then
6 → после await
2 → setTimeout