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:
- Kui jõutakse reale
await, peatub praegune funktsioon. - Juhtimine naaseb kutsuva koodi (või sündmuste tsükli) juurde, võimaldades teiste programmiosade töötamist. See takistab UI lukustamist.
- Kui
Future, milleleawaitviitab, 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. - Kui
Futureõnnestub lõpetada, muutubFuturetagastatud väärtusawaitväljendi tulemuseks. - Kui
Futurelõpetab vea (visates erandi), visatakse see erandawaitkutsumiskohta.
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.