Middle
Тартиби воқеа дар бораи фарқият байни setTimeout ва await дар промиссаҳо аз нуқтаи назари микро ва макро вазифаҳо дар event loop чӣ гуна аст?
sobes.tech AI
Ҷавоб аз 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).