Back to questions
Middle
6
Чем отличается setTimeout от await промиса с точки зрения микротасков и макротасков в event loop?
Companies where asked
МВидео/эльдорадо
Answer from AI
sobes.tech AI
setTimeout и await промиса работают с разными очередями в event loop.
-
setTimeoutставит колбэк в очередь макротасков (macrotask queue). Это значит, что после выполнения текущего стека вызовов и всех микротасков, event loop перейдёт к макротаскам и выполнит колбэк изsetTimeout. -
awaitпромиса (или.then) ставит продолжение в очередь микротасков (microtask queue). Микротаски выполняются сразу после текущего стека вызовов и перед макротасками.
Итог:
- Сначала выполняется текущий код.
- Затем выполняются все микротаски (продолжения промисов,
await). - После этого — макротаски (
setTimeout, события и т.п.).
Пример:
console.log('start');
setTimeout(() => console.log('timeout'), 0);
Promise.resolve().then(() => console.log('promise'));
console.log('end');
Вывод будет:
start
end
promise
timeout
Это показывает, что микротаски (промисы) выполняются раньше макротасков (setTimeout).