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

/* Что выведется в консоли */ console.log(1); Promise.resolve().then(() => console.log(2)); setTimeout(() => console.log(3)); Promise.resolve().then(() => console.log(4)); console.log(5); setTimeout(() => { Promise.resolve().then(() => console.log(6)); console.log(7); Promise.resolve().then(() => console.log(8)); }, 0); setTimeout(() => console.log(9));

Компании, где спрашивали
М.Видео/эльдорадо

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

sobes.tech AI

Вывод в консоль будет следующим:

1
5
2
4
3
7
9
6
8

Объяснение порядка вывода:

  1. console.log(1); — синхронный вызов, выводит 1.
  2. Promise.resolve().then(() => console.log(2)); и Promise.resolve().then(() => console.log(4)); — это микротаски, они выполняются после текущего стека вызовов.
  3. console.log(5); — синхронный, выводит 5.

После синхронного кода выполняются микротаски:

  • вывод 2
  • вывод 4

Затем выполняются макротаски (таймауты):

  • первый setTimeout(() => console.log(3)); — вывод 3
  • второй setTimeout(() => { ... }); — внутри:
    • console.log(7); синхронный внутри таймаута
    • Promise.resolve().then(() => console.log(6)); и Promise.resolve().then(() => console.log(8)); — микротаски, выполнятся после текущего макротаска
  • третий setTimeout(() => console.log(9)); — вывод 9

Порядок макротасков и микротасков внутри них:

  • Выполняется первый таймаут: вывод 3
  • Выполняется второй таймаут:
    • вывод 7
    • планируются микротаски 6 и 8
  • Выполняется третий таймаут: вывод 9

После всех макротасков выполняются микротаски, запланированные внутри них:

  • вывод 6
  • вывод 8

Итоговый порядок: 1, 5, 2, 4, 3, 7, 9, 6, 8.