Sobes.tech
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). Микротаски выполняются сразу после текущего стека вызовов и перед макротасками.

Итог:

  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).