Когда рекурсия через then заканчивается

Вывод: 0, end, 1, 2. Рекурсия останавливается при n=2; без условия она бесконечно ставила бы новые микрозадачи.

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

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

Вывод: 0, end, 1, 2. Рекурсия останавливается при n=2; без условия она бесконечно ставила бы новые микрозадачи.

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

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

Условие

Определите порядок и условие завершения:

function next(n) {
  console.log(n);
  if (n < 2) Promise.resolve().then(() => next(n + 1));
}
next(0);
console.log('end');

Ответ

Вывод: 0, end, 1, 2. Рекурсия останавливается при n=2; без условия она бесконечно ставила бы новые микрозадачи.

Каждый следующий вызов начинается после завершения предыдущего синхронного стека. Поэтому глубина стека не растёт так же, как при прямом вызове next. Однако бесконечное пополнение микрозадач всё равно способно задержать таймеры и отрисовку; асинхронность не заменяет явное условие остановки.

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

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

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

Подробнее