Sobes.tech
Middle

Proč asynchronní funkce ihned nevrací uvedený typ?

sobes.tech AI

Odpověď od AI

Asynchronní funkce ve Flutter/Dart nevrací okamžitě požadovaný typ, protože provádí operaci, která může zabrat čas (například síťový požadavek, čtení souboru). Místo blokování běhového vlákna do dokončení operace, asynchronní funkce ihned vrací Future.

Future je objekt, který představuje potenciální hodnotu nebo chybu, jež budou dostupné v budoucnu. Funguje jako slib, že operace bude dokončena, a jakmile k tomu dojde, výsledkem bude buď hodnota požadovaného typu, nebo chyba.

Použití Future umožňuje hlavnímu vláknu (hlavní izolátoru) pokračovat v zpracování dalších úkolů, aniž by čekalo na dokončení asynchronní operace. Když operace skončí, Future o tom informuje a zaregistrovaný kód (například přes .then() nebo await) může zpracovat výsledek.

Příklad:

Future<String> fetchData() async {
  // Simulace dlouhé operace
  await Future.delayed(Duration(seconds: 2));
  return "Data přijata!";
}

void main() {
  print("Začátek");
  fetchData().then((data) {
    print(data); // Bude provedeno po dokončení Future
  });
  print("Konec"); // Probíhá okamžitě, bez čekání na fetchData
}

Výstup tohoto kódu bude:

Začátek
Konec
Data přijata!

Toto demonstruje neblokující chování. Pokud by fetchData ihned vracelo String, program by se zablokoval na 2 sekundy před vytištěním "Konec". Future umožňuje takové blokování zabránit.