Dart tiliga kirish O'zgaruvchilar va konstantalar Primitiv ma'lumotlar turlari
Asinxron funksiyalar va operatorlar asinxronlanadi va kutiladi
Download 374.15 Kb.
|
3-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:
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
E'tibor bering, doWork funksiyasi Future tugashidan oldin tugaydi. Endi async-await yordamida bir xil kodni qayta yozamiz:
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:
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:
Kutish ifodasi asinxron operatsiyani ifodalaydi. Asinxron operatsiya - bu boshqa amallarning bajarilishini bloklamaydigan va ularni oxirigacha bajarishga imkon beradigan operatsiya. Bunday holda, bular:
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 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:
Natijada, bu holda, konsol chiqishi quyidagicha ko'rinadi: Начало функции 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:
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 Download 374.15 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling