Назад к вопросам
Middle
3
FE forked forked forked forked forked forked ```JavaScript console.log('Таймаут'); // 4 }, 0); let p = new Promise(function(resolve, reject) { console.log('Создание промиса'); // 1 resolve(); }); p.then(function(){ console.log('Обработка промиса'); // 3 }); console.log('Конец скрипта'); // 2 Усложненный кейс console.log(1); setTimeout(() => console.log(2)); Promise.resolve().then(() => console.log(3)); Promise.resolve().then(() => setTimeout(() => console.log(4))); Promise.resolve().then(() => console.log(5)); setTimeout(() => console.log(6)); console.log(7); ```
Компании, где спрашивали
IGaming
Ответ от нейросети
sobes.tech AI
Разберём порядок вывода в данном коде JavaScript, учитывая особенности event loop, микротасков (Promises) и макротасков (setTimeout).
Код:
console.log(1);
setTimeout(() => console.log(2));
Promise.resolve().then(() => console.log(3));
Promise.resolve().then(() => setTimeout(() => console.log(4)));
Promise.resolve().then(() => console.log(5));
setTimeout(() => console.log(6));
console.log(7);
Пояснение:
-
Сначала выполняется весь синхронный код:
- console.log(1) -> выводит 1
- console.log(7) -> выводит 7
-
Затем выполняются микротаски (Promise.then):
- console.log(3)
- setTimeout(() => console.log(4)) — это макротаск, добавленный в очередь таймаутов
- console.log(5)
-
После микротасков выполняются макротаски (setTimeout):
- console.log(2)
- console.log(6)
- console.log(4) (из setTimeout внутри Promise.then)
Итоговый порядок вывода:
1
7
3
5
2
6
4
Это демонстрирует, что микротаски (Promises) выполняются сразу после синхронного кода и до макротасков (setTimeout), а setTimeout внутри микротаска добавляется в очередь макротасков и выполняется позже.