Back to questions
Middle+
2
console.log(1) setTimeout(() => { console.log(2) }, 10) setTimeout(() => { Promise.resolve().then(() => console.log(3)) }, 0); setTimeout(() => { console.log(4) }, 0); new Promise((_, reject) => { console.log(5) reject(6) console.log(7) }).then(() => console.log(8)) .catch(() => console.log(9)) .then(() => console.log(10)) .catch(() => console.log(11)) .then(() => console.log(12)) .then(console.log) .finally(() => console.log(13)) console.log(14)
Companies where asked
Mayflower
Answer from AI
sobes.tech AI
Разберём порядок вывода в консоль по шагам:
console.log(1)
setTimeout(() => {
console.log(2)
}, 10)
setTimeout(() => {
Promise.resolve().then(() => console.log(3))
}, 0);
setTimeout(() => {
console.log(4)
}, 0);
new Promise((_, reject) => {
console.log(5)
reject(6)
console.log(7)
}).then(() => console.log(8))
.catch(() => console.log(9))
.then(() => console.log(10))
.catch(() => console.log(11))
.then(() => console.log(12))
.then(console.log)
.finally(() => console.log(13))
console.log(14)
-
Синхронный код выполняется сразу:
console.log(1)→ 1- В конструкторе промиса:
console.log(5)→ 5 console.log(7)→ 7console.log(14)→ 14
-
Промис отклонён (
reject(6)), поэтому цепочка.catch()срабатывает. -
Микротаски (Promise handlers) выполняются после текущего стека:
.catch(() => console.log(9))→ 9.then(() => console.log(10))→ 10.catch()пропускается, так как нет ошибки.then(() => console.log(12))→ 12.then(console.log)— получаетundefined(результат предыдущего then), выводитundefined.finally(() => console.log(13))→ 13
-
Макротаски (setTimeout) срабатывают после микротасков:
setTimeout(..., 0)сPromise.resolve().then(() => console.log(3))— сначала срабатывает setTimeout, внутри которого создаётся микротаск, который выводит 3setTimeout(..., 0)сconsole.log(4)— выводит 4setTimeout(..., 10)сconsole.log(2)— выводит 2
Итоговый порядок вывода:
1
5
7
14
9
10
12
undefined
13
3
4
2
Объяснение:
- Сначала синхронный код.
- Затем обработчики промисов (микротаски).
- Потом setTimeout с 0 задержкой (макротаски), внутри которых могут быть микротаски.
- Наконец, setTimeout с задержкой 10 мс.