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:
- Kai pasiekiama eilutė su
await, dabartinė funkcija laikinai sustoja. - Valdymas grįžta kviečiančiam kodui (arba į įvykio ciklą), leidžiant kitoms programos dalims veikti. Tai neleidžia UI užšalti.
- Kai
Future, į kurį nurodoawait, 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. - Jei
Futuresėkmingai baigiasi,Futuregrąžinta reikšmė tampaawaitišraiškos rezultatu. - Jei
Futurebaigiasi klaida (išmeta išimtį), ši išimtis bus išmesta vietoje, kur buvo iškviestasawait.
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ė.