Junior
Cum funcționează cuvântul cheie await în programarea asincronă pe Flutter?
sobes.tech AI
Răspuns de la AI
Cuvântul cheie await este utilizat în funcțiile asincrone (marcate cu cuvântul cheie async) pentru a suspenda execuția funcției până când Future se finalizează și returnează un rezultat.
Principiul de funcționare:
- Când execuția ajunge la linia cu
await, funcția curentă este suspendată. - Controlul este returnat către codul care a apelat (sau bucla de evenimente), permițând altor părți ale programului să ruleze. Acest lucru previne blocarea interfeței utilizatorului.
- Când
Futurela care se face referire cuawaitse finalizează (adică, își execută operația asincronă și returnează o valoare sau aruncă o excepție), funcția suspendată se reia de unde a fost întreruptă. - Dacă
Futures-a finalizat cu succes, valoarea returnată devine rezultatul expresieiawait. - Dacă
Futures-a încheiat cu o eroare (a aruncat o excepție), această excepție va fi aruncată în locul unde a fost apelatawait.
Exemplu:
// Funcție asincronă marcată cu async
Future<String> fetchData() async {
// Simulare a unei operații asincrone (de exemplu, o cerere de rețea)
await Future.delayed(Duration(seconds: 2));
return 'Datele din rețea au fost primite!';
}
void main() async {
print('Începutul obținerii datelor...');
// Utilizarea await pentru a aștepta finalizarea Future
try {
String data = await fetchData();
print('Primite: $data');
} catch (e) {
print('Eroare la obținerea datelor: $e');
}
print('Programul s-a încheiat (deși await-ul poate fi încă în curs)');
}
În acest exemplu, main este marcat ca async pentru a putea folosi await. Apelul await fetchData() suspendă execuția main pentru 2 secunde, fără a bloca firul principal al interfeței utilizatorului. În timp ce fetchData așteaptă, alte părți ale aplicației pot funcționa. Odată ce fetchData se finalizează, execuția main continuă, iar variabila data primește valoarea returnată.