Darsliklar Dart Future sinfi bilan ishlash

Dart Dart Future sinfi bilan ishlash

Future sinfi bilan ishlash — asinxron natijalarni chuqurroq boshqarish. O’tgan darsda Future va then bilan tanishdik; endi xatolarni ushlash, bir necha Future’ni birlashtirish va ularni boshqarishni o’rganamiz. Bu real ilovalarda — tarmoq so’rovlari va ma’lumotlar bilan ishlashda — hal qiluvchi ahamiyatga ega.

Future sinfiasinxron amal natijasini ifodalovchi obyekt. Uning then, catchError, whenComplete metodlari natijani va xatolarni boshqaradi.

then va catchError

then natijani, catchError esa xatoni ushlaydi. Ular birga ishonchli asinxron kod yaratadi:

Future<int> bolish(int a, int b) {
  return Future.delayed(Duration(seconds: 1), () {
    if (b == 0) throw Exception("Nolga bo'lish");
    return a ~/ b;
  });
}

void main() {
  bolish(10, 2)
      .then((natija) => print("Natija: $natija"))
      .catchError((e) => print("Xato: $e"));
}
Natija: 5

then muvaffaqiyatli natijani (5) oldi. Agar bolish(10, 0) bo’lsa, catchError xatoni ushlardi. Ularni zanjirlab, ham natija, ham xatoni boshqaramiz.

whenComplete — har doim

whenComplete — natija bo’ladimi yoki xato bo’ladimi, doim bajariladi (xuddi finally kabi):

Future<String> malumotOl() {
  return Future.delayed(Duration(seconds: 1), () => "Tayyor");
}

void main() {
  malumotOl()
      .then((n) => print("Natija: $n"))
      .whenComplete(() => print("So'rov yakunlandi"));
}
Natija: Tayyor
So'rov yakunlandi

whenComplete so’rov qanday yakunlanishidan qat’i nazar bajarildi. Bu “yuklanmoqda” belgisini o’chirish kabi tozalash ishlarida foydali.

Future metodlari

Future ning asosiy metodlarini jadvalda ko’ramiz:

Metod Vazifasi
then() natija tayyor bo’lganda ishlaydi
catchError() xatoni ushlaydi
whenComplete() har doim bajariladi
Future.wait() bir necha Future’ni kutadi

Future.wait — bir necha so’rov

Future.wait bir necha asinxron amalni bir vaqtda kutadi va hammasi tayyor bo’lganda natijalarni beradi:

void main() {
  var f1 = Future.delayed(Duration(seconds: 1), () => "Birinchi");
  var f2 = Future.delayed(Duration(seconds: 1), () => "Ikkinchi");

  Future.wait([f1, f2]).then((natijalar) {
    print(natijalar);
  });
}
[Birinchi, Ikkinchi]

Future.wait([f1, f2]) ikki so’rovni bir vaqtda bajardi va ikkovi tayyor bo’lganda natijalarni ro’yxat sifatida berdi. Bu bir necha so’rovni parallel bajarib, vaqtni tejaydi.

Xulosa

Bu bo’limda then/catchError bilan natija va xatoni, whenComplete bilan yakuniy amalni va Future.wait bilan parallel so’rovlarni ko’rib chiqdik. Bu metodlar asinxron kodni ishonchli qiladi. Keyingi darsda async va await bilan bu Dart qo’llanmasini yakunlaymiz.