Назад к вопросам
Middle
4
Определи порядок вывода в консоль для кода с setTimeout, Promise, then, catch, finally и различными синхронными вызовами (задача на Event Loop).
Компании, где спрашивали
Mayflower
Ответ от нейросети
sobes.tech AI
В JavaScript порядок вывода в консоль при использовании setTimeout, Promise, then, catch, finally и синхронных вызовов определяется очередями Event Loop:
- Сначала выполняется весь синхронный код.
- Затем выполняются микротаски (microtasks): обработчики Promise (then, catch, finally).
- После микротасок выполняются макротаски (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 — макротаска, выполняется после микротасок.
Таким образом, при анализе кода с такими конструкциями нужно помнить, что микротаски имеют приоритет над макротасками, а синхронный код выполняется первым.