Sobes.tech
Middle

Koja je razlika između setTimeout i await u pogledu mikro i makro zadataka u event loop-u?

sobes.tech АИ

Одговор од АИ

setTimeout и await промиса работают с разными очередями в event loop.

  • setTimeout ставит колбэк в очередь макротасков (macrotask queue). Это значит, что после выполнения текущего стека вызовов и всех микротасков, event loop перейдёт к макротаскам и выполнит колбэк из setTimeout.

  • await промиса (или .then) ставит продолжение в очередь микротасков (microtask queue). Микротаски выполняются сразу после текущего стека вызовов и перед макротасками.

Итог:

  1. Сначала выполняется текущий код.
  2. Затем выполняются все микротаски (продолжения промисов, await).
  3. После этого — макротаски (setTimeout, события и т.п.).

Пример:

console.log('start');
setTimeout(() => console.log('timeout'), 0);
Promise.resolve().then(() => console.log('promise'));
console.log('end');

Вывод будет:

start
end
promise
timeout

Это показывает, что микротаски (промисы) выполняются раньше макротасков (setTimeout).