Вопрос проверяет понимание разницы между синхронной рекурсией и асинхронным выполнением через микрозадачи Promise.
Когда вы вызываете функцию рекурсивно через Promise.resolve().then(recursiveFn), каждый новый вызов помещается в очередь микрозадач (microtask queue). Это принципиально отличается от синхронной рекурсии, где каждый вызов добавляет новый фрейм в стек вызовов.
function recursiveLoop() {
console.log('Шаг');
Promise.resolve().then(recursiveLoop);
}
recursiveLoop();
console.log('Синхронный код');В этом примере сначала выполнится весь синхронный код (выведется 'Синхронный код'), а затем начнут выполняться микрозадачи. Каждый вызов recursiveLoop создаёт новую микрозадачу, и стек вызовов не переполняется, так как между вызовами он очищается.
Такой подход используется для:
Рекурсия через Promise.resolve() позволяет выполнять бесконечные асинхронные операции без риска переполнения стека, но требует явного условия остановки, иначе приведёт к бесконечному выполнению микрозадач.
Уровень
Рейтинг:
4
Сложность:
6
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию