Порядок вывода: 1, 3, 2, 4. Конструктор Promise выполняет executor синхронно, а сам Promise остаётся pending до callback таймера.
Определение порядка вывода в консоль (пример 72)
Порядок вывода: 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 не превращает вызов в синхронный.