Sobes.tech
Middle

Kāpēc asinhronā funkcija nekavējoties neatgriež norādīto tipu?

sobes.tech AI

Atbilde no AI

Flutter/Dart asinhronā funkcija nekavējas uzreiz atgriezt norasto tipa, jo tā veic operāciju, kas var aizņemt laiku (piemēram, tīkla pieprasījums, faila lasīšana). Tā vietā, lai bloķētu izpildes plūsmu līdz operācijas beigām, asinhronā funkcija nekavējoties atgriež Future.

Future ir objekts, kas pārstāv potenciālo vērtību vai kļūdu, kas būs pieejama nākotnē. Tas darbojas kā solījums, ka operācija tiks pabeigta, un, kad tas notiek, rezultāts būs vai nu norādītā tipa vērtība, vai kļūda.

Future izmantošana ļauj galvenajai izpildes plūsmai (galvenajam izolatoram) turpināt apstrādāt citas uzdevumus, negaidot asinhronās operācijas pabeigšanu. Kad operācija ir pabeigta, Future par to informē, un reģistrētais kods (piemēram, caur .then() vai await) var apstrādāt rezultātu.

Piemērs:

Future<String> fetchData() async {
  // Ilgas operācijas imitācija
  await Future.delayed(Duration(seconds: 2));
  return "Dati saņemti!";
}

void main() {
  print("Sākums");
  fetchData().then((data) {
    print(data); // Tiks izpildīts pēc `Future` pabeigšanas
  });
  print("Beigas"); // Tiek izpildīts nekavējoties, nesagaidot fetchData
}

Šī koda izvade būs:

Sākums
Beigas
Dati saņemti!

Tas demonstrē neblokējošu uzvedību. Ja fetchData uzreiz atgrieztu String, programma bloķētos 2 sekundes pirms izdrukas "Beigas". Future ļauj izvairīties no šāda bloķēšanas.