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ť.