Что появится в консоли? (пример 71)

Во время самого синхронного цикла callbacks ничего не печатают. Если бы цикл успешно завершился, сначала выполнились бы все micro, затем macro; на практике миллиард регистраций может повесить процесс.

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

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

Во время самого синхронного цикла callbacks ничего не печатают. Если бы цикл успешно завершился, сначала выполнились бы все micro, затем macro; на практике миллиард регистраций может повесить процесс.

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

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

Условие

Определите, какой вывод будет получен в консоль при выполнении следующего кода:

for (let index = 0; index < 1000000000; index++) {
    Promise.resolve('1').then(() => console.log('micro'));
    setTimeout(() => console.log('macro'));
}

Ответ

Во время самого синхронного цикла callbacks ничего не печатают. Если бы цикл успешно завершился, сначала выполнились бы все micro, затем macro; на практике миллиард регистраций может повесить процесс.

Promise.then добавляет микрозадачу, а setTimeout — отложенную задачу. Пока текущий скрипт не вернул управление, ни одна из них не начинает работу. После цикла очередь микрозадач очищается раньше таймеров.

Создание миллиарда Promise-реакций и таймеров требует огромной памяти и времени, поэтому гарантировать полный вывод нельзя: возможны нехватка памяти, завершение вкладки или зависание. Этот пример нужно объяснять по модели исполнения, а не запускать на рабочей машине.

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

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

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

Подробнее