Asinxron funksiyalar va async, await operatorlari — asinxron kodni sinxron kod kabi oson yozish imkonini beruvchi zamonaviy vosita. then zanjirlari ba’zan chalkash bo’ladi; async/await esa asinxron kodni tabiiy, yuqoridan pastga o’qiladigan qiladi. Bu — Dart va Flutter’da asinxron dasturlashning eng ko’p ishlatiladigan usulidir.
async va await —
asyncfunksiyani asinxron qiladi,awaitesaFuturenatijasini kutib, uni oddiy qiymat kabi oladi. Ular kodni tozaroq qiladi.
await — natijani kutish
await Future tayyor bo’lishini kutadi va natijani to’g’ridan-to’g’ri qaytaradi. Funksiya async bilan belgilanishi shart:
Future<String> malumotOl() {
return Future.delayed(Duration(seconds: 1), () => "UzbekDevs ma'lumoti");
}
void main() async {
print("So'rov yuborildi");
String natija = await malumotOl();
print("Keldi: $natija");
}
So'rov yuborildi
Keldi: UzbekDevs ma'lumoti
await malumotOl() natija tayyor bo’lishini kutdi va uni to’g’ridan-to’g’ri natija ga berdi. then ga qaraganda, bu kod ancha tabiiy — go’yo sinxron yozilgandek. main esa async bilan belgilangan.
then va await solishtiruvi
Ikki yondashuvni solishtiramiz — ikkovi bir xil ishlaydi, ammo o’qilishi farq qiladi:
| Yondashuv | Uslub |
|---|---|
then |
zanjirli, murakkab bo’lishi mumkin |
async/await |
yuqoridan pastga, tabiiy |
await bilan yozilgan kod odatda o’qiladiganroq, ayniqsa bir necha asinxron amal ketma-ket bajarilganda.
try-catch bilan xato
async funksiyada xatoni oddiy try-catch bilan ushlash mumkin — bu catchError dan tabiiyroq:
Future<int> bolish(int a, int b) async {
if (b == 0) throw Exception("Nolga bo'lish");
return a ~/ b;
}
void main() async {
try {
int natija = await bolish(10, 0);
print(natija);
} catch (e) {
print("Xato ushlandi: $e");
}
}
Xato ushlandi: Exception: Nolga bo'lish
await bilan xatoni oddiy try-catch ushladi — xuddi sinxron koddagi kabi. Bu async/await ning katta afzalligi: asinxron kod sinxron kabi yoziladi.
Ketma-ket asinxron amallar
await bir necha asinxron amalni ketma-ket, tushunarli tarzda bajaradi:
Future<String> qadam(String nom) async {
await Future.delayed(Duration(seconds: 1));
return "$nom bajarildi";
}
void main() async {
print(await qadam("Birinchi"));
print(await qadam("Ikkinchi"));
print("Hammasi tayyor");
}
Birinchi bajarildi
Ikkinchi bajarildi
Hammasi tayyor
Har bir await o’z amalini kutdi, so’ng keyingisiga o’tdi. Kod yuqoridan pastga, tabiiy o’qiladi. Bu murakkab asinxron mantiqni sodda qiladi.
Xulosa
Bu bo’limda async/await bilan asinxron kodni sinxron kabi yozishni, try-catch bilan xato ushlashni va ketma-ket asinxron amallarni ko’rib chiqdik. async/await — Dart’da asinxron dasturlashning zamonaviy usulidir.