Sobes.tech
Назад к вопросам
Middle
4

Определи порядок вывода в консоль для кода с setTimeout, Promise, then, catch, finally и различными синхронными вызовами (задача на Event Loop).

Компании, где спрашивали
Mayflower

Ответ от нейросети

sobes.tech AI

В JavaScript порядок вывода в консоль при использовании setTimeout, Promise, then, catch, finally и синхронных вызовов определяется очередями Event Loop:

  1. Сначала выполняется весь синхронный код.
  2. Затем выполняются микротаски (microtasks): обработчики Promise (then, catch, finally).
  3. После микротасок выполняются макротаски (macrotasks): setTimeout, setInterval и другие.

Пример:

console.log('start');

setTimeout(() => console.log('timeout'), 0);

Promise.resolve()
  .then(() => console.log('promise then'))
  .catch(() => console.log('promise catch'))
  .finally(() => console.log('promise finally'));

console.log('end');

Вывод будет:

start
end
promise then
promise finally
timeout

Объяснение:

  • "start" и "end" — синхронные вызовы.
  • then и finally — микротаски, выполняются после синхронного кода.
  • setTimeout — макротаска, выполняется после микротасок.

Таким образом, при анализе кода с такими конструкциями нужно помнить, что микротаски имеют приоритет над макротасками, а синхронный код выполняется первым.