Kodėl asinchroninė funkcija neduoda iš karto nurodyto tipo?
sobes.tech AI
Atsakymas iš AI
„Flutter/Dart“ asinchroninė funkcija iš karto negrąžina nurodyto tipo, nes ji vykdo operaciją, kuri gali užtrukti (pavyzdžiui, tinklo užklausą, failo skaitymą). Vietoj to, kad užblokuotų vykdymo srautą iki operacijos pabaigos, asinchroninė funkcija iš karto grąžina Future.
Future yra objektas, kuris atstovauja galimą reikšmę arba klaidą, kurios bus pasiekiamos ateityje. Jis veikia kaip pažadas, kad operacija bus užbaigta, ir, kai tai įvyksta, rezultatas bus arba nurodyto tipo reikšmė, arba klaida.
Future naudojimas leidžia pagrindiniam vykdymo srautui (pagrindiniam izoliatoriui) tęsti kitų užduočių vykdymą, nesulaukiant asinchroninės operacijos pabaigos. Kai operacija baigiasi, Future apie tai praneša, ir užregistruotas kodas (pavyzdžiui, per .then() arba await) gali apdoroti rezultatą.
Pavyzdys:
Future<String> fetchData() async {
// Ilgos operacijos imitacija
await Future.delayed(Duration(seconds: 2));
return "Duomenys gauti!";
}
void main() {
print("Pradžia");
fetchData().then((data) {
print(data); // Bus vykdoma po `Future` pabaigos
});
print("Pabaiga"); // Vykdoma iš karto, nesulaukiant fetchData
}
Šio kodo išvestis bus:
Pradžia
Pabaiga
Duomenys gauti!
Tai rodo, kad veiksmas nevyksta blokuojant. Jei fetchData iš karto grąžintų String, programa užstrigtų 2 sekundes prieš spausdindama "Pabaiga". Future leidžia išvengti tokio užstrigimo.