Darsliklar Dart Asinxron funksiyalar va async, await operatorlari

Dart Dart Asinxron funksiyalar va async, await operatorlari

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 awaitasync funksiyani asinxron qiladi, await esa Future natijasini 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.