Какое значение вернет асинхронная функция без return?

«Какое значение вернет асинхронная функция без return?» — вопрос из категории Асинхронность, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В JavaScript (и, соответственно, в Node.js) асинхронная функция (async function) всегда возвращает Promise. Если в такой функции нет оператора return, она неявно возвращает undefined, и Promise разрешится именно с этим значением.

Пример:

async function fetchDataAndLog() {
  const response = await fetch('https://api.example.com/data');
  const data = await response.json();
  console.log(data);
  // Нет оператора return
}

const resultPromise = fetchDataAndLog(); // resultPromise — это Promise

resultPromise.then((value) => {
  console.log('Результат промиса:', value); // Выведет: Результат промиса: undefined
});

Почему так происходит? Ключевое слово async заставляет функцию возвращать Promise. Тело функции выполняется, и если интерпретатор не встречает return, он действует по стандартному правилу: функция завершается, возвращая undefined. Это undefined автоматически оборачивается в успешно выполненный Promise (Promise.resolve(undefined)).

Это важно учитывать при цепочке вызовов или при использовании async функций в качестве обработчиков, где может ожидаться конкретное значение.