Sobes.tech
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:

  1. Wanneer de uitvoering de regel met await bereikt, wordt de huidige functie gepauzeerd.
  2. 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.
  3. Wanneer de Future waarnaar await verwijst, 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.
  4. Als de Future succesvol is voltooid, wordt de waarde die door de Future wordt geretourneerd, het resultaat van de uitdrukking await.
  5. Als de Future met een fout eindigt (een uitzondering werpt), wordt deze uitzondering op de plek waar await werd 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.