Sobes.tech
Junior

Kaip veikia raktinis žodis await asinchroniniame programavime Flutter?

sobes.tech AI

Atsakymas iš AI

Raktas await naudojamas asinchroninėse funkcijose (pažymėtose raktu async), kad sustabdytų funkcijos vykdymą iki tol, kol Future nebaigsis ir negrąžins rezultato.

Veikimo principas:

  1. Kai pasiekiama eilutė su await, dabartinė funkcija laikinai sustoja.
  2. Valdymas grįžta kviečiančiam kodui (arba į įvykio ciklą), leidžiant kitoms programos dalims veikti. Tai neleidžia UI užšalti.
  3. Kai Future, į kurį nurodo await, baigia (t.y., atlieka savo asinchroninę operaciją ir grąžina reikšmę arba išmeta išimtį), sustabdytas funkcijos vykdymas atnaujinamas nuo vietos, kur jis buvo nutrauktas.
  4. Jei Future sėkmingai baigiasi, Future grąžinta reikšmė tampa await išraiškos rezultatu.
  5. Jei Future baigiasi klaida (išmeta išimtį), ši išimtis bus išmesta vietoje, kur buvo iškviestas await.

Pavyzdys:

// Asinchroninė funkcija pažymėta `async`
Future<String> fetchData() async {
  // Asinchroninės operacijos imitacija (pvz., tinklo užklausa)
  await Future.delayed(Duration(seconds: 2));
  return 'Gauti duomenys iš tinklo!';
}

void main() async {
  print('Pradėti duomenų gavimą...');

  // Naudojant `await` laukiama `Future` pabaigos
  try {
    String data = await fetchData();
    print('Gauta: $data');
  } catch (e) {
    print('Klaida gaunant duomenis: $e');
  }

  print('Programa baigta (nors `await` vis dar gali būti vykdomas)');
}

Šiame pavyzdyje main pažymėta kaip async, kad būtų galima naudoti await. await fetchData() sustabdo main vykdymą 2 sekundes, neblokuojant pagrindinio UI srauto. Kol fetchData laukia, kitos programos dalys gali veikti. Kai fetchData baigiasi, main tęsia darbą, ir kintamajam data priskiriama grąžinta reikšmė.