Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: async, await, Promise, asynchronous, JavaScript

Почему async/await требует возврата Promise из функции?

Этот вопрос проверяет понимание связи между async/await и Promise, объясняя, почему асинхронные функции всегда возвращают Promise.

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

Ключевое слово async перед функцией гарантирует, что она всегда возвращает Promise. Это нужно для единообразия работы с асинхронным кодом. Даже если функция возвращает обычное значение, оно автоматически оборачивается в разрешённый Promise. Если функция возвращает Promise, он и будет результатом. Это позволяет использовать await внутри функции и строить цепочки асинхронных операций.

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

Ключевое слово async в JavaScript — это синтаксический сахар над промисами, который делает асинхронный код более читаемым и похожим на синхронный. Когда вы объявляете функцию с async, вы сообщаете движку JavaScript, что эта функция будет работать с асинхронными операциями, и её выполнение может быть приостановлено с помощью await.

Как работает async/await

Любая функция, помеченная как async, автоматически возвращает объект Promise. Это происходит независимо от того, что вы возвращаете из тела функции:

  • Если вы возвращаете обычное значение (например, число или строку), движок оборачивает его в разрешённый Promise (Promise.resolve(value)).
  • Если вы возвращаете уже существующий Promise, он и становится результатом функции.
  • Если в функции выбрасывается исключение, оно преобразуется в отклонённый Promise (Promise.reject(error)).

Практический пример

Рассмотрим простой пример, демонстрирующий это поведение:

// Функция async всегда возвращает Promise
async function getNumber() {
    return 42; // Автоматически оборачивается в Promise.resolve(42)
}

// Эквивалент без async
function getNumberPromise() {
    return Promise.resolve(42);
}

// Обе функции можно использовать одинаково
getNumber().then(value => console.log(value)); // 42
getNumberPromise().then(value => console.log(value)); // 42

// Использование await внутри async функции
async function fetchData() {
    const response = await fetch('https://api.example.com/data'); // await приостанавливает выполнение, пока Promise не разрешится
    const data = await response.json();
    return data; // Возвращаемое значение оборачивается в Promise
}

// Вызов fetchData возвращает Promise, поэтому мы можем использовать .then или await
fetchData().then(data => console.log(data));

Зачем это нужно?

Такое поведение обеспечивает консистентность. Поскольку await может ожидать только Promise, функция, содержащая await, сама должна возвращать Promise, чтобы её можно было ожидать в другой async-функции. Это создаёт единую модель для всех асинхронных операций и позволяет легко комбинировать и цепочкировать вызовы.

Итог: async/await требует возврата Promise из функции для обеспечения совместимости и цепочки асинхронных операций; это фундаментальное правило, которое делает асинхронный код в JavaScript последовательным и предсказуемым.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

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

#async

#await

#Promise

#asynchronous

#JavaScript

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