Назад к вопросам
Middle
4
```javascript console.log("Start"); setTimeout(() => { console.log("Timeout 1"); Promise.resolve().then(() => console.log("Promise inside Timeout")); }, 0); Promise.resolve() .then(() => { console.log("Promise 0"); setTimeout(() => console.log("Timeout inside Promise"), 0); }) .catch(() => console.log("Promise 1")) .then(() => console.log("Promise 2")); requestAnimationFrame(() => { console.log("RequestAnimationFrame"); }); console.log("End"); ```
Компании, где спрашивали
Мыс
Ответ от нейросети
sobes.tech AI
Вывод будет следующим:
Start
End
Promise 0
Promise 2
Timeout 1
Promise inside Timeout
Timeout inside Promise
RequestAnimationFrame
Объяснение:
- Сначала выполняется синхронный код:
console.log("Start")иconsole.log("End"). - Затем выполняются микротаски (microtasks) — это промисы:
Promise.resolve().then(() => { console.log("Promise 0"); ... })— выводит "Promise 0".- После этого в цепочке
.then(() => console.log("Promise 2"))— выводит "Promise 2".
- Макротаски (macrotasks) — таймауты с
setTimeoutс нулевой задержкой:- Первый
setTimeoutвыводит "Timeout 1". - Внутри него создаётся промис, который ставится в микротаски и выводит "Promise inside Timeout".
- Второй
setTimeoutвнутри промиса выводит "Timeout inside Promise".
- Первый
requestAnimationFrameставится в отдельную очередь и выполняется после макротасков, выводит "RequestAnimationFrame".
Таким образом, порядок основан на приоритетах микротасков (промисов), затем макротасков (таймаутов), и в конце requestAnimationFrame.