Nima uchun asinxron funktsiya belgilangan turni darhol qaytarmaydi?
sobes.tech AI
AIdan javob
Flutter/Dart'da asinxron funksiya darhol ko'rsatilgan turni qaytarmaydi, chunki u vaqt oladigan operatsiyani bajaradi (masalan, tarmoq so'rovi, fayl o'qish). Operatsiya tugashiga qadar bajarilayotgan oqimni bloklamaslik uchun, asinxron funksiya darhol Future ni qaytaradi.
Future — bu kelajakda mavjud bo'ladigan ehtimoliy qiymat yoki xato ni ifodalovchi ob'ekt. Bu, operatsiya tugallanishi vaqti kelganda, natija yoki belgilangan turdagi qiymat, yoki xato bo'lishi mumkinligini va'da qiladi.
Future dan foydalanish, asosiy bajarilayotgan oqimga (asosiy izolyator) boshqa vazifalarni bajarishda davom etishga imkon beradi, asinxron operatsiya tugashini kutmasdan. Operatsiya tugagach, Future bu haqida xabar beradi, va yozilgan kod (masalan, .then() yoki await orqali) natijani qayta ishlash mumkin.
Misol:
Future<String> fetchData() async {
// Uzun operatsiya simulyatsiyasi
await Future.delayed(Duration(seconds: 2));
return "Ma'lumotlar olindi!";
}
void main() {
print("Boshlanish");
fetchData().then((data) {
print(data); // Future tugagandan so'ng bajariladi
});
print("Yakuni"); // Darhol bajariladi, fetchData ni kutmay
}
Bu kodning chiqishi:
Boshlanish
Yakuni
Ma'lumotlar olindi!
Bu, bloklamasdan ishlashni ko'rsatadi. Agar fetchData darhol String qaytarsa edi, dastur 2 soniya davomida bloklanib, "Yakuni" ni chop etishdan oldin to'xtab qolardi. Future bunday bloklashni oldini oladi.