Junior
Ako funguje kľúčové slovo await v asynchrónnom programovaní na Flutter?
sobes.tech AI
Odpoveď od AI
Kľúčové slovo await sa používa v asynchrónnych funkciách (označených kľúčovým slovom async) na pozastavenie vykonávania funkcie, kým Future nedokončí a nevráti výsledok.
Princíp fungovania:
- Keď vykonanie dosiahne riadok s
await, aktuálna funkcia sa pozastaví. - Kontrola sa vráti na volajúci kód (alebo na event loop), čo umožňuje iným častiam programu pokračovať vo vykonávaní. Tým sa zabráni zablokovaniu UI.
- Keď sa
Future, na ktorý sa odkazujeawait, dokončí (t.j. vykoná svoju asynchrónnu operáciu a vráti hodnotu alebo vyhodí výnimku), pozastavená funkcia sa obnoví od miesta, kde bola prerušená. - Ak
Futureúspešne skončil, hodnota, ktorúFuturevráti, sa stáva výsledkom výrazuawait. - Ak
Futureskončil chybou (vyhodil výnimku), táto výnimka bude vyhodená na mieste, kde bolo volanéawait.
Príklad:
// Asynchrónna funkcia označená ako `async`
Future<String> fetchData() async {
// Simulácia asynchrónnej operácie (napríklad sieťový požiadavok)
await Future.delayed(Duration(seconds: 2));
return 'Dáta zo siete!';
}
void main() async {
print('Začiatok získavania dát...');
// Použitie `await` na čakanie na dokončenie Future
try {
String data = await fetchData();
print('Prijaté: $data');
} catch (e) {
print('Chyba pri získavaní dát: $e');
}
print('Program bol ukončený (hoci `await` ešte môže bežať)');
}
V tomto príklade je main označená ako async, aby mohla používať await. Volanie await fetchData() pozastaví vykonávanie main na 2 sekundy, bez blokovania hlavného UI vlákna. Kým fetchData čaká, ostatné časti aplikácie môžu pokračovať v práci. Keď fetchData skončí, vykonávanie main sa obnoví a premennej data bude priradená vrátená hodnota.