Порядок вывода в консоль – пример 13

Порядок: hello, sub, bye, then1, then2, setTimeout. Executor Promise работает синхронно, обработчики then — в микрозадачах, таймер — позже.

Короткий ответ

Что ответить на собеседовании

Порядок: hello, sub, bye, then1, then2, setTimeout. Executor Promise работает синхронно, обработчики then — в микрозадачах, таймер — позже.

Подробный разбор

Ответ с пояснениями

Условие

Определите, в каком порядке будут выведены сообщения в консоль при выполнении следующего JavaScript‑кода:

function fn() {
  console.log("hello");

  setTimeout(function () {
    console.log("setTimeout");
  }, 0);

  new Promise(function (resolve) {
    console.log("sub");

    resolve();
  })
    .then(function () {
      console.log("then1");
    })
    .then(function () {
      console.log("then2");
    });

  console.log("bye");
}

fn();

Ответ

Порядок: hello, sub, bye, then1, then2, setTimeout. Executor Promise работает синхронно, обработчики then — в микрозадачах, таймер — позже.

Сначала выполняется тело fn: регистрируется таймер, конструктор Promise немедленно печатает sub, затем печатается bye. После освобождения стека выполняется первый then, который делает доступным второй. Очередь микрозадач опустошается до перехода к задаче таймера; задержка 0 не означает немедленное выполнение.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее