Mobil ilovalar ishlab chiqish


Asinxron funksiyalar va operatorlar asinxronlanadi va kutiladi



Download 387,44 Kb.
bet34/34
Sana14.01.2022
Hajmi387,44 Kb.
#363624
1   ...   26   27   28   29   30   31   32   33   34
Bog'liq
Dart tili mustaqil ish

Asinxron funksiyalar va operatorlar asinxronlanadi va kutiladi

So'nggi subversiyalar asinxron kod yozishni osonlashtirish uchun Dart-ga asinxron va kutish operatorlarini qo'shdi. Async-await-dan foydalanish Future API-dan to'g'ridan-to'g'ri foydalanishdan, xususan, keyin va catchError usullaridan xalos bo'lishga imkon beradi.


Birinchidan, keling, Future API yordamida asinxronsiz va kutmasdan kod yozishni ko'rib chiqamiz:

1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



16

17

18



void doWork() {

    print("Начало функции doWork");

    Future messageFuture = getMessage();

    messageFuture.then((message){

        print("Получено сообщение: $message");

    });


    print("Завершение функции doWork");

}

 



Future getMessage() {

  // имитация долгой работы с помощью задержки в 3 секунды

  return Future.delayed(Duration(seconds: 3), () => "Hello Dart");

}

 



void main () {

  doWork();

  print("Выполнение функции main");

}


Bunday holda, getMessage () funktsiyasi aniqlanadi, u ba'zi xabarlarni qabul qilishi kerak. Uzoq muddatli ishlashni taqlid qilish uchun unda 3 soniya kechikish o'rnating. Lekin, aslida, bu tarmoq so'rovlarini, ma'lumotlar bazasiga kirishni, fayllarni o'qish-yozishni va uzoq vaqt talab qiladigan boshqa noqulay ishlarni bajaradigan funksiya bo'lishi mumkin.
Aytaylik, doWork () funksiyasida biz Future obyektini qaytaruvchi getMessage funksiyasini chaqiramiz. Uning keyingi usuli orqali biz kerakli xabarni olamiz va uni konsolga chop qilamiz. Asosiy funktsiyada doWork-ga qo'ng'iroq qiling.
Dasturning konsol chiqishi:

Начало функции doWork

Завершение функции doWork

Выполнение функции main

Получено сообщение: Hello Dart

E'tibor bering, doWork funksiyasi Future tugashidan oldin tugaydi.


Endi async-await yordamida bir xil kodni qayta yozamiz:

1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



16

Future doWork() async {

    print("Начало функции doWork");

    String message = await getMessage();

    print("Получено сообщение: $message");

    print("Завершение функции doWork");

}

 



Future getMessage() {

  // имитация долгой работы с помощью задержки в 3 секунды

  return Future.delayed(Duration(seconds: 3), () => "Hello Dart");

}

 



void main () {

  doWork();

  print("Выполнение функции main");

}


Uzoq muddatli ishlarni bajaradigan getMessage funksiyasi (bu holda xabar oladi) o'zgarishsiz qoladi. Asosiy o'zgarishlar xabarni qabul qilish uchun getMessage-ni chaqiruvchi doWork funksiyasiga tegishli. Endi u asinxron sifatida aniqlanadi. Buning uchun funksiya parametrlari roʻyxatidan soʻng asinxron operatori koʻrsatiladi:

1

Future doWork() async {

Asinxron funksiya - bu kamida bitta asinxron operatsiyani o'z ichiga olgan funksiya (garchi u bilan birga sinxron operatsiyalar ham bo'lishi mumkin). Asinxron funksiya sinxron bo'lib ko'rinadi, bundan tashqari u asinxron va kutish operatorlaridan foydalanadi.
Asinxron funksiya kutish ifodasining birinchi chaqiruvigacha bo'lgan barcha kodlarni sinxron tarzda bajaradi. Bunday holda, quyidagi qator sinxron ravishda bajariladi:

1

print("Начало функции doWork");

Kutish ifodasi asinxron operatsiyani ifodalaydi. Asinxron operatsiya - bu boshqa amallarning bajarilishini bloklamaydigan va ularni oxirigacha bajarishga imkon beradigan operatsiya. Bunday holda, bular:

1

String message = await getMessage();

Kutish ifodasi odatda Future obyektini qaytaradi. Agar boshqa turdagi ob'ekt qaytarilsa, u avtomatik ravishda Future-ga o'raladi. Va Future-da saqlanadigan bu ob'ekt, biz oddiy tayinlash operatsiyasini olishimiz mumkin. Shunday qilib, getMessage () funksiyasi Future ni qaytaradi, ya'ni Future ba'zi qatorlarni saqlaydi. Va tayinlash operatsiyasi orqali biz ushbu satrni xabar o'zgaruvchisiga o'tkazishimiz mumkin. Keyin biz ushbu chiziq bilan biz xohlagan narsani qilishimiz mumkin, masalan, konsolga chiqish.

Kutish ifodasi kerakli ob'ekt (bu holda, satr) mavjud bo'lgunga qadar bajarishni to'xtatib turadi. Va asinxron getMessage funksiyasi uning bajarilishini boshlaydigan Future obyektini qaytaradi.


Va kutish ifodasidan satrni olganimizdan so'ng, doWork funktsiyasi o'z bajarilishini davom ettiradi va kodning qolgan qismini bajarishga o'tadi:

1

2


print("Получено сообщение: $message");

print("Завершение функции doWork");



Natijada, bu holda, konsol chiqishi quyidagicha ko'rinadi:

Начало функции doWork

Выполнение функции main

Получено сообщение: Hello Dart

Завершение функции doWork

Shuni ta'kidlash kerakki, agar funktsiya await dan foydalansa, u async kalit so'zi bilan aniqlanishi kerak. Shuni ham ta'kidlash joizki, asinxron funksiya bir nechta kutish iboralarini o'z ichiga olishi mumkin. Bunday holda, ular ketma-ket bajariladi: oldingisi tugagach, keyingi kutish ifodasi bajarila boshlaydi.


Qayta ishlashda xatolik

Agar uzoq muddatli operatsiyani bajarishda xatolik yuzaga kelsa, Future ob'ektida aniq ma'lumotlar o'rniga xato haqida ma'lumot bo'ladi. Ushbu vaziyatni hal qilish uchun try..catch blokiga kutish ifodasini qo'ying:



1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



16

17

18



19

20

21



Future doWork() async {

  print("Начало функции doWork");

  try{

    String message = await getMessage();



    print("Получено сообщение: $message");

  }


  catch(e){

    print("Произошла ошибка: $e");

  }

  print("Завершение функции doWork");



}

 

Future getMessage() {



  // с помощью оператора throw имитируем возникновение ошибки

  return Future.delayed(Duration(seconds: 3), () => throw "Сервер не отвечает");

}

 

void main () {



  doWork();

  print("Выполнение функции main");

}


Xatoni simulyatsiya qilish uchun biz otish operatorini chaqiramiz, shundan so'ng biz xato matnini ko'rsatamiz. try..catch konstruksiyasidagi asinxron funksiyada biz xatoni ushlay olamiz va uni hal qilamiz. Natijada, konsol chiqishi quyidagicha ko'rinadi:

Начало функции doWork

Выполнение функции main

Произошла ошибка: Сервер не отвечает



Завершение функции doWork

Fergana 2021

Download 387,44 Kb.

Do'stlaringiz bilan baham:
1   ...   26   27   28   29   30   31   32   33   34




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish