Определение последовательности вывода в консоль (задача 3)

Вывод: 1, 2, 4, 'timerStart', 'timerEnd', 'success'. resolve меняет состояние Promise, но его then выполняется только после завершения текущего обработчика таймера.

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

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

Вывод: 1, 2, 4, 'timerStart', 'timerEnd', 'success'. resolve меняет состояние Promise, но его then выполняется только после завершения текущего обработчика таймера.

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

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

Условие

Укажите порядок и значения, которые появятся в консоли при выполнении следующего кода:

const myPromise = new Promise((resolve) => {
  console.log(1);
  setTimeout(() => {
    console.log("timerStart");
    resolve("success");
    console.log("timerEnd");
  }, 0);
  console.log(2);
});

myPromise.then((res) => {
  console.log(res);
});

console.log(4);

Ответ

Вывод: 1, 2, 4, 'timerStart', 'timerEnd', 'success'. resolve меняет состояние Promise, но его then выполняется только после завершения текущего обработчика таймера.

Executor Promise запускается синхронно, поэтому сначала печатаются 1 и 2, затем внешний console.log выводит 4. Таймер позже печатает timerStart, разрешает Promise значением success и продолжает до timerEnd. Только после освобождения стека выполняется микрозадача then. Вызов resolve не является return и не прерывает последующие строки функции.

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

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

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

Подробнее