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

Консоль выведет F, G, L, T. Executor Promise выполняется сразу, затем идёт обычный console.log, потом обработчик then и лишь после него таймер.

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

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

Консоль выведет F, G, L, T. Executor Promise выполняется сразу, затем идёт обычный console.log, потом обработчик then и лишь после него таймер.

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

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

Условие

В данном задании требуется понять, в каком порядке будут напечатаны строки в консоль при выполнении представленного кода JavaScript, учитывая особенности очереди микротасков и макротасков.

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

var p = new Promise(function (resolve, reject) {
    console.log("F");
    resolve();
});

p.then(function () {
    console.log("L");
});

console.log("G");

Опишите, какие значения появятся в консоли и почему они выводятся именно в такой последовательности.

Ответ

Консоль выведет F, G, L, T. Executor Promise выполняется сразу, затем идёт обычный console.log, потом обработчик then и лишь после него таймер.

resolve() переводит p в выполненное состояние, но не запускает then внутри executor. Callback then добавляется в очередь микрозадач и выполняется после текущего стека. Таймер T относится к следующей задаче event loop. Задержка 0 не даёт ему приоритет перед синхронным кодом или ожидающими микрозадачами.

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

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

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

Подробнее