Определение порядка вывода в консоль (пример 72)

Порядок вывода: 1, 3, 2, 4. Конструктор Promise выполняет executor синхронно, а сам Promise остаётся pending до callback таймера.

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

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

Порядок вывода: 1, 3, 2, 4. Конструктор Promise выполняет executor синхронно, а сам Promise остаётся pending до callback таймера.

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

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

Условие

Укажите, какие значения появятся в консоли при выполнении приведённого ниже JavaScript‑кода:

const p = new Promise((resolve) => {
    console.log(1);
    setTimeout(() => {
        console.log(2);
        resolve();
    }, 0);
    console.log(3);
});

p.then(() => {
    console.log(4);
});

Ответ

Порядок вывода: 1, 3, 2, 4. Конструктор Promise выполняет executor синхронно, а сам Promise остаётся pending до callback таймера.

При создании p сразу печатается 1, регистрируется таймер и печатается 3. Присоединённый then пока ждёт завершения p.

Когда таймер начинает работу, он сначала выводит 2, затем вызывает resolve(). После завершения его callback соответствующая микрозадача запускает then и печатает 4. Нулевая задержка setTimeout не превращает вызов в синхронный.

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

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

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

Подробнее