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

«Что возвращает асинхронная функция в Dart?» — вопрос из категории Асинхронность, который задают на 44% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Асинхронная функция, помеченная ключевым словом async, всегда возвращает объект типа Future<T>. T — это тип реального значения, которое будет вычислено в будущем.

  • Если функция возвращает String, то ее сигнатура будет Future<String>.
  • Если функция не возвращает явного значения (void), то сигнатура — Future<void>.

Пример:

Future<int> fetchUserId() async {
  await Future.delayed(Duration(seconds: 1)); // Имитация асинхронной операции
  return 42; // Значение 42 будет обернуто в Future<int>
}

Future<void> logMessage(String message) async {
  print(message);
  // Неявно возвращается Future<void>
}

void main() async {
  // Обработка через await
  final int id = await fetchUserId();

  // Обработка через then/catchError
  fetchUserId().then((id) {
    print('User ID: $id');
  }).catchError((error) {
    print('Ошибка: $error');
  });
}

Ключевые моменты:

  1. Future — это контейнер для отложенного результата (успешного значения или ошибки).
  2. Ключевое слово async позволяет использовать await внутри функции и автоматически оборачивает возвращаемое значение в Future.
  3. Для работы с Future используются await (внутри async-функций) или методы then(), catchError(), whenComplete().