> Что происходит при запуске функции с промисами и почему результат может быть пустым? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Альфа-банк, DigitalSail
Стек: JavaScript
> Пример ответа
При запуске функции с промисами выполнение кода не блокируется - промис попадает в очередь микрозадач (microtask queue) и обрабатывается асинхронно после завершения текущего синхронного кода. Результат может быть пустым, если:
-
Не дождались разрешения промиса - функция возвращает промис, но вызывающий код не использует
awaitили.then(), поэтому результат (например, данные из API) ещё не получен к моменту проверки. -
Промис был отклонён (rejected) без обработки ошибки - если нет
.catch()илиtry/catchсawait, ошибка «проглатывается», и результат остаётсяundefined. -
Функция не возвращает промис явно - например, внутри
asyncфункции забылиreturn, тогда она возвращаетPromise.resolve(undefined). -
Гонка состояний (race condition) - промис ещё не завершился, а код уже пытается использовать его результат в синхронном контексте.
Пример:
JAVASCRIPTasync function getData() {const response = await fetch('/api'); // асинхронноreturn response.json();}const data = getData(); // data - промис, а не данныеconsole.log(data); // Promise { <pending> } - пусто
Правильно: const data = await getData();
> Похожие задачи по frontend
Как обрабатывать случаи отклонения одного из промисов в Promise.all в JavaScript?
Как реализовать глубокое клонирование объекта в JavaScript?
Что такое NaN и в каких случаях он возникает
В чем разница между map и forEach в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью