Sobes.tech
Junior

Kuidas töötab võtmesõna await Flutteris asünkroonilises programmeerimises?

sobes.tech AI

Vastus AI-lt

Võti await kasutatakse asünkroonsetes funktsioonides (märgitud võtmega async), et peatada funktsiooni täitmine kuni Future lõpetab ja tagastab tulemuse.

Tööpõhimõte:

  1. Kui jõutakse reale await, peatub praegune funktsioon.
  2. Juhtimine naaseb kutsuva koodi (või sündmuste tsükli) juurde, võimaldades teiste programmiosade töötamist. See takistab UI lukustamist.
  3. Kui Future, millele await viitab, lõpetab (ehk teostab oma asünkroonse operatsiooni ja tagastab väärtuse või viskab erandi), jätkub peatatud funktsiooni täitmine sellest kohast, kus see katkestati.
  4. Kui Future õnnestub lõpetada, muutub Future tagastatud väärtus await väljendi tulemuseks.
  5. Kui Future lõpetab vea (visates erandi), visatakse see erand await kutsumiskohta.

Näide:

// Asünkroonne funktsioon märgitud `async`
Future<String> fetchData() async {
  // Asünkroonse operatsiooni imitatsioon (nt võrgupäring)
  await Future.delayed(Duration(seconds: 2));
  return 'Andmed võrgust!';
}

void main() async {
  print('Andmete saamine algab...');

  // Kasutades `await`, oodatakse Future lõpetamist
  try {
    String data = await fetchData();
    print('Saadud: $data');
  } catch (e) {
    print('Viga andmete saamisel: $e');
  }

  print('Programm on lõpetatud (kuigi `await` võib veel töötada)');
}

Selles näites on main märgitud async, et kasutada await. await fetchData() peatab main täitmise 2 sekundiks, mitte blokeerides peamist kasutajaliidese voogu. Kui fetchData ootab, saavad teised osad töötada. Kui fetchData lõpetab, jätkab main ja muutuja data saab tagastatud väärtuse.