Вывод: 0, end, 1, 2. Рекурсия останавливается при n=2; без условия она бесконечно ставила бы новые микрозадачи.
Когда рекурсия через then заканчивается
Вывод: 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. Однако бесконечное пополнение микрозадач всё равно способно задержать таймеры и отрисовку; асинхронность не заменяет явное условие остановки.