Junior
Как работи ключовата дума await в асинхронното програмиране на Flutter?
sobes.tech AI
Отговор от AI
Ключовата дума await се използва в асинхронни функции (обозначени с ключовата дума async), за да спре изпълнението на функцията, докато Future не приключи и не върне резултат.
Принцип на работа:
- Когато изпълнението достигне реда с
await, текущата функция се спира. - Контролът се връща към извикващия код (или към цикъла на събитията), позволявайки на други части от програмата да се изпълняват. Това предотвратява блокирането на UI.
- Когато
Future, към който се отнасяawait, се завърши (т.е. изпълни асинхронната си операция и върне стойност или хвърли изключение), спрената функция се възобновява от мястото, където е била прекъсната. - Ако
Futureе успешно завършен, стойността, върната отFuture, става резултат от изразаawait. - Ако
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 получава върнатата стойност.