Sobes.tech
Junior

Как работи ключовата дума await в асинхронното програмиране на Flutter?

sobes.tech AI

Отговор от AI

Ключовата дума await се използва в асинхронни функции (обозначени с ключовата дума async), за да спре изпълнението на функцията, докато Future не приключи и не върне резултат.

Принцип на работа:

  1. Когато изпълнението достигне реда с await, текущата функция се спира.
  2. Контролът се връща към извикващия код (или към цикъла на събитията), позволявайки на други части от програмата да се изпълняват. Това предотвратява блокирането на UI.
  3. Когато Future, към който се отнася await, се завърши (т.е. изпълни асинхронната си операция и върне стойност или хвърли изключение), спрената функция се възобновява от мястото, където е била прекъсната.
  4. Ако Future е успешно завършен, стойността, върната от Future, става резултат от израза await.
  5. Ако Future е завършил с грешка (е хвърлил изключение), това изключение ще бъде хвърлено на мястото, където е извикан await.

Пример:

// Асиминхронна функция, обозначена с async
Future<String> fetchData() async {
  // Симулация на асинхронна операция (например, мрежова заявка)
  await Future.delayed(Duration(seconds: 2));
  return 'Данни от мрежата!';
}

void main() async {
  print('Започване на получаване на данни...');

  // Използване на await за изчакване завършването на Future
  try {
    String data = await fetchData();
    print('Получено: $data');
  } catch (e) {
    print('Грешка при получаване на данни: $e');
  }

  print('Програмата е завършена (въпреки че await все още може да се изпълнява)');
}

В този пример main е обозначена като async, за да може да използва await. Обаждането await fetchData() спира изпълнението на main за 2 секунди, без да блокира основния поток на UI. Докато fetchData чака, други части на приложението могат да продължат да работят. След като fetchData приключи, изпълнението на main продължава, и променливата data получава върнатата стойност.