Answer
t.me/js_testОтвет:
1 2 promise1 timer1 promise2 timer2
Объяснение:
Сначала выполняется весь синхронный код, в нашем случае это два верхнеуровневых лога ("1" и "2"). Затем выполняются все микротаски, в нашем случае это then первого промиса ("promise1"), также внутри выполнения первого промиса регистрируется новый setTimeout но пока не выполняется потому что в очереди макротасков лежит timer1, который и будет выполнятся ("timer1"). Внутри функции первого таймера регистрируется новая микрозадача promise2 она и будет выполнена потому что имеет больший приоритет чем timer2. Ну и последним выполняется timer2 так как очередь свободна.
Код:
console.log("1");
const promise1 = Promise.resolve().then(() => {
console.log("promise1");
const timer2 = setTimeout(() => {
console.log("timer2");
}, 0);
});
const timer1 = setTimeout(() => {
console.log("timer1");
const promise2 = Promise.resolve().then(() => {
console.log("promise2");
});
}, 0);
console.log("2");