Консоль выведет F, G, L, T. Executor Promise выполняется сразу, затем идёт обычный console.log, потом обработчик then и лишь после него таймер.
Определение порядка вывода в консоль (пример 96)
Консоль выведет 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 не даёт ему приоритет перед синхронным кодом или ожидающими микрозадачами.