PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Что возвращает асинхронная функция?

Асинхронность и Event Loop

Асинхронная функция (`async`) всегда возвращает промис. Возвращённое значение оборачивается в Promise.resolve, а выброшенная ошибка — в Promise.reject.

Что возвращается

async function getValue() {
  return 42;
}
const result = getValue();
console.log(result);            // Promise { 42 }
result.then((v) => console.log(v)); // 42

Даже если вернуть обычное значение, оно оборачивается в промис.

Возврат промиса

Если вернуть промис, двойной обёртки не будет: внешний промис примет его состояние (но это всё равно новый объект промиса):

async function fetchUser() {
  return fetch('/user'); // вернётся новый промис с результатом fetch
}

Ошибки

throw внутри async-функции превращается в отклонённый промис:

async function fail() {
  throw new Error('упал');
}
fail().catch((e) => console.log(e.message)); // 'упал'

Как получить результат

  • Через .then():
getValue().then((v) => console.log(v));
  • Через await в другой async-функции:
const value = await getValue();

Коротко для собеседования

async-функция всегда возвращает промис: обычное значение оборачивается в Promise.resolve, throw — в Promise.reject, состояние возвращённого промиса перенимается без двойной обёртки. Результат получают через await или .then().

Другие вопросы раздела