Sobes.tech
Middle

Prečo asynchrónna funkcia okamžite ne vracia uvedený typ?

sobes.tech AI

Odpoveď od AI

Asynchrónna funkcia vo Flutter/Dart nevracia okamžite požadovaný typ, pretože vykonáva operáciu, ktorá môže trvať čas (napríklad sieťová požiadavka, čítanie súboru). Namiesto blokovania vykonávacieho vlákna do ukončenia operácie, asynchrónna funkcia okamžite vráti Future.

Future je objekt, ktorý predstavuje potenciálnu hodnotu alebo chybu, ktoré budú dostupné v budúcnosti. Funguje ako sľub, že operácia bude dokončená, a akonáhle sa tak stane, výsledkom bude buď hodnota požadovaného typu, alebo chyba.

Použitie Future umožňuje hlavnému vláknu (hlavnému izolátu) pokračovať v spracovaní iných úloh, bez čakania na dokončenie asynchrónnej operácie. Keď operácia skončí, Future o tom informuje, a registrovaný kód (napríklad cez .then() alebo await) môže spracovať výsledok.

Príklad:

Future<String> fetchData() async {
  // Simulácia dlhšej operácie
  await Future.delayed(Duration(seconds: 2));
  return "Dáta boli prijaté!";
}

void main() {
  print("Začiatok");
  fetchData().then((data) {
    print(data); // Bude vykonané po dokončení Future
  });
  print("Koniec"); // Vykoná sa okamžite, bez čakania na fetchData
}

Výstup tohto kódu bude:

Začiatok
Koniec
Dáta boli prijaté!

Toto demonštruje neblokujúce správanie. Ak by fetchData okamžite vrátilo String, program by sa zablokoval na 2 sekundy pred vytlačením "Koniec". Future umožňuje takúto blokáciu eliminovať.