Junior
Hoe werkt het sleutelwoord await in asynchrone programmeren op Flutter?
sobes.tech AI
Antwoord van AI
Het sleutelwoord await wordt gebruikt in asynchrone functies (aangeduid met het sleutelwoord async) om de uitvoering van de functie te onderbreken totdat de Future is voltooid en een resultaat retourneert.
Werking principe:
- Wanneer de uitvoering de regel met
awaitbereikt, wordt de huidige functie gepauzeerd. - De controle wordt teruggegeven aan de aanroepende code (of de event loop), waardoor andere delen van het programma kunnen worden uitgevoerd. Dit voorkomt dat de UI wordt geblokkeerd.
- Wanneer de
Futurewaarnaarawaitverwijst, wordt voltooid (dat wil zeggen, voert zijn asynchrone operatie uit en geeft een waarde terug of werpt een uitzondering), wordt de gepauzeerde functie hervat vanaf de plek waar deze was onderbroken. - Als de
Futuresuccesvol is voltooid, wordt de waarde die door deFuturewordt geretourneerd, het resultaat van de uitdrukkingawait. - Als de
Futuremet een fout eindigt (een uitzondering werpt), wordt deze uitzondering op de plek waarawaitwerd aangeroepen, geworpen.
Voorbeeld:
// Asynchrone functie gemarkeerd met async
Future<String> fetchData() async {
// Simulatie van een asynchrone operatie (bijvoorbeeld een netwerkverzoek)
await Future.delayed(Duration(seconds: 2));
return 'Data ontvangen van het netwerk!';
}
void main() async {
print('Begin met ophalen van gegevens...');
// Gebruik van await om te wachten op de voltooiing van de Future
try {
String data = await fetchData();
print('Ontvangen: $data');
} catch (e) {
print('Fout bij het ophalen van gegevens: $e');
}
print('Programma voltooid (hoewel await nog kan worden uitgevoerd)');
}
In dit voorbeeld is main gemarkeerd als async om await te kunnen gebruiken. De aanroep await fetchData() pauzeert de uitvoering van main voor 2 seconden, zonder de hoofd-UI-thread te blokkeren. Terwijl fetchData wacht, kunnen andere delen van de applicatie blijven werken. Zodra fetchData is voltooid, wordt de uitvoering van main hervat, en wordt de variabele data toegewezen met de geretourneerde waarde.