Sobes.tech
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:

  1. Keď vykonanie dosiahne riadok s await, aktuálna funkcia sa pozastaví.
  2. 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.
  3. Keď sa Future, na ktorý sa odkazuje await, 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á.
  4. Ak Future úspešne skončil, hodnota, ktorú Future vráti, sa stáva výsledkom výrazu await.
  5. Ak Future skonč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.