Sobes.tech
Junior

Kā darbojas atslēgas vārds await asinhronajā programmēšanā Flutter?

sobes.tech AI

Atbilde no AI

Atslēgvārds await tiek izmantots asinhronās funkcijās (iezīmēts ar atslēgvārdu async), lai pārtrauktu funkcijas izpildi līdz brīdim, kad Future pabeigsies un atgriezīs rezultātu.

Darba princips:

  1. Kad tiek sasniegta rinda ar await, pašreizējā funkcija tiek pārtraukta.
  2. Kontrole tiek atgriezta izsaucējam (vai notikumu cilpai), ļaujot citām programmas daļām darboties. Tas novērš UI bloķēšanu.
  3. Kad Future, uz kuru norāda await, pabeidz (t.i., veic savu asinhrono operāciju un atgriež vērtību vai izmet izņēmumu), pārtraukta funkcijas izpilde tiek atsākta no vietas, kur tā tika pārtraukta.
  4. Ja Future ir veiksmīgi pabeigts, Future atgrieztais vērtība kļūst par await izteiksmes rezultātu.
  5. Ja Future pabeidzas ar kļūdu (izmetot izņēmumu), šis izņēmums tiks izsviests vietā, kur tika izsaukts await.

Piemērs:

// Asinhrona funkcija ar `async`
Future<String> fetchData() async {
  // Asinhronas operācijas imitācija (piemēram, tīkla pieprasījums)
  await Future.delayed(Duration(seconds: 2));
  return 'Dati no tīkla!';
}

void main() async {
  print('Datu saņemšanas sākums...');

  // Izmantojot `await`, gaidām `Future` pabeigšanu
  try {
    String data = await fetchData();
    print('Saņemts: $data');
  } catch (e) {
    print('Kļūda datu saņemšanā: $e');
  }

  print('Programma pabeigta (lai gan `await` vēl var darboties)');
}

Šajā piemērā main ir iezīmēta kā async, lai varētu izmantot await. await fetchData() pārtrauc main darbību uz 2 sekundēm, neblokējot galveno UI plūsmu. Kamēr fetchData gaida, citas programmas daļas var darboties. Kad fetchData pabeidzas, main atsāk darbu, un mainīgajam data tiek piešķirta atgriezta vērtība.