Порядок: hello, sub, bye, then1, then2, setTimeout. Executor Promise работает синхронно, обработчики then — в микрозадачах, таймер — позже.
Порядок вывода в консоль – пример 13
Порядок: hello, sub, bye, then1, then2, setTimeout. Executor Promise работает синхронно, обработчики then — в микрозадачах, таймер — позже.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, в каком порядке будут выведены сообщения в консоль при выполнении следующего JavaScript‑кода:
function fn() {
console.log("hello");
setTimeout(function () {
console.log("setTimeout");
}, 0);
new Promise(function (resolve) {
console.log("sub");
resolve();
})
.then(function () {
console.log("then1");
})
.then(function () {
console.log("then2");
});
console.log("bye");
}
fn();
Ответ
Порядок: hello, sub, bye, then1, then2, setTimeout. Executor Promise работает синхронно, обработчики then — в микрозадачах, таймер — позже.
Сначала выполняется тело fn: регистрируется таймер, конструктор Promise немедленно печатает sub, затем печатается bye. После освобождения стека выполняется первый then, который делает доступным второй. Очередь микрозадач опустошается до перехода к задаче таймера; задержка 0 не означает немедленное выполнение.