Sobes.tech
Middle

Miks asünkroonne funktsioon ei tagasta kohe määratud tüüpi?

sobes.tech AI

Vastus AI-lt

Flutter/Dart'is asünkroonne funktsioon ei naase kohe määratud tüüpi, sest see täidab operatsiooni, mis võib võtta aega (näiteks võrgupäring, faili lugemine). Selle asemel, et blokeerida täitmise voog kuni operatsiooni lõpuni, tagastab asünkroonne funktsioon kohe Future.

Future on objekt, mis esindab potentsiaalset väärtust või viga, mis saab olema saadaval tulevikus. See toimib nagu lubadus, et operatsioon lõpetatakse, ja kui see juhtub, on tulemus kas määratud tüüpi väärtus või viga.

Future kasutamine võimaldab peamisel täitmisvoogul (peamine isolaator) jätkata teiste ülesannete täitmist, ilma et peaks ootama asünkroonse operatsiooni lõppu. Kui operatsioon lõpeb, teavitab Future sellest ning registreeritud kood (näiteks .then() või await) saab tulemust töödelda.

Näide:

Future<String> fetchData() async {
  // Pikk tegevuse simulatsioon
  await Future.delayed(Duration(seconds: 2));
  return "Andmed on saadud!";
}

void main() {
  print("Algus");
  fetchData().then((data) {
    print(data); // Täidab pärast `Future` lõpetamist
  });
  print("Lõpp"); // Täidab kohe, ilma et ootaks fetchData-d
}

Selle koodi väljund on:

Algus
Lõpp
Andmed on saadud!

See näitab mitte-blokeerivat käitumist. Kui fetchData tagastaks kohe String, blokeeriks programm 2 sekundit enne "Lõpp" printimist. Future võimaldab sellist blokeerimist vältida.