Во время самого синхронного цикла callbacks ничего не печатают. Если бы цикл успешно завершился, сначала выполнились бы все micro, затем macro; на практике миллиард регистраций может повесить процесс.
Что появится в консоли? (пример 71)
Во время самого синхронного цикла 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-реакций и таймеров требует огромной памяти и времени, поэтому гарантировать полный вывод нельзя: возможны нехватка памяти, завершение вкладки или зависание. Этот пример нужно объяснять по модели исполнения, а не запускать на рабочей машине.