Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: Promise, microtask, event loop, recursion, asynchronous

Что произойдёт, если рекурсивно вызывать функцию через Promise.resolve()?

Вопрос проверяет понимание разницы между синхронной рекурсией и асинхронным выполнением через микрозадачи Promise.

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

Рекурсивный вызов функции через Promise.resolve() создаёт цепочку микрозадач. Каждый вызов помещается в очередь микрозадач и выполняется после завершения текущего синхронного кода. Это предотвращает переполнение стека, так как стек очищается между вызовами, но может привести к бесконечному циклу, если нет условия выхода.

Длинный ответ

Как работает рекурсия через Promise.resolve()

Когда вы вызываете функцию рекурсивно через Promise.resolve().then(recursiveFn), каждый новый вызов помещается в очередь микрозадач (microtask queue). Это принципиально отличается от синхронной рекурсии, где каждый вызов добавляет новый фрейм в стек вызовов.

Пример кода

function recursiveLoop() {
  console.log('Шаг');
  Promise.resolve().then(recursiveLoop);
}

recursiveLoop();
console.log('Синхронный код');

В этом примере сначала выполнится весь синхронный код (выведется 'Синхронный код'), а затем начнут выполняться микрозадачи. Каждый вызов recursiveLoop создаёт новую микрозадачу, и стек вызовов не переполняется, так как между вызовами он очищается.

Практическое применение

Такой подход используется для:

  • Избежания переполнения стека при глубокой рекурсии
  • Создания асинхронных циклов с возможностью прерывания
  • Реализации планировщиков задач с приоритетами

Вывод

Рекурсия через Promise.resolve() позволяет выполнять бесконечные асинхронные операции без риска переполнения стека, но требует явного условия остановки, иначе приведёт к бесконечному выполнению микрозадач.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

Ключевые слова

#Promise

#microtask

#event loop

#recursion

#asynchronous

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию