JavaScriptda async/await
Josh*Assalaamu alaykum.
Maqola yozmaganimga ham ancha vaqt bo'libdi.
Avval "Asinxron JavaScript" mavzusi uchun maqolalar ketma-ketligini va'da bergan edim.
Bugun ushbu mavzuning oxirgi maqolasi JavaScriptda async/await deb nomlanadi.
Bu maqolani o'qishingiz uchun sizdan Promise nima va qanday ishlashini bilish talab qilinadi.
Demak boshladik.
Bismillah.
Biz avalgi maqolalarimizda Promise'lar qanday ishlashi haqida gaplashgan edik. Uzundan uzun Callback'lardan qutulib, o'rniga Promise'larni qanday qilib ishlatish mumkinligini o'rganib chiqqan edik. Xuddi shu ko'rinishda, bugun Promise'larni async/await orqali qanday qilib yanada qulay usul bilan ishlatishni ko'rib chiqamiz.
Funksiyalarni oldida async so'zini ko'rsangiz, bilingki bu funksiya Promise qaytaradi.
Oson a ?
Keling async'ga bir misol ko'ramiz.

Ko'rib turganingizdek, bu juda oson, shunchaki async kalit so'zini funksiya oldiga qo'yasiz, qarabsizki funksiya Promise qaytaradi.
Bizda hali faqat bu emas.
await - kalit so'zi faqatgina async funksiyalar ichida ishlatiladi.
Nima vazifani bajaradi ?
await - kalit so'zi async funksiya ichida ishlatilgan Promise'ni .resolve() yoki .reject() bo'lgunigacha kutib turadi va JavaScriptni ham keyingi qatorga qo'yib yubormaydi.
Agar oldida turgan Promise'dan javob qaytsa, javobni qaytaradi, so'ngra JavaScript keyingi qatorni o'qishni boshlaydi.
Bunday:

Ko'rib turganingizdek, async funksiya ichida await kalit so'zini ishlatgan holda ancha katta ishlar qilsak bo'lar ekan. Xususan, .then() metodlarini ko'p ishlatishdan ham qutilar ekanmiz.
Buyerda biz faqatgina bir dona Promise bilan misol ko'rdik. Ammo, haqiqiy dasturlarda funksiyalar ichida birnechtalab Promise'larni ko'rasiz. Shu holatda har biriga birma-bir .then() qilib chiqishdan ko'ra, await orqali hammasini hal qilganimiz ancha oson va qulay bo'ladi.
Keling endi birgalikda ko'p dasturlar kodida uchraydigan misolni yozamiz.
Bizga foydalanuvchi ID raqami beriladi, u ID orqali foydalanuvchini xaridlarini bazadan olib console'ga chiqaramiz.

Mana async/await orqali ushbu vazifani bajardik.
Endi farqini bilish uchun, ushbu topshiriqni async/await'siz bajaramiz.

Ko'rib turganingizdek async/await bilan kodimizni ancha tushunarli, toza va oson qilib yozishimiz mumkin ekan. Ayniqsa Promise'lar ko'payib ketsa, async/await juda ham kerak bo'lishni boshlaydi.
Savol tug'uladi: Tepadagi hamma misollarda Promise'lar resolve() bo'lmoqda. Ya'ni to'g'ri ishlamoqda. Agar reject() bo'lsachi ?
Bu holatda shu kodimiz turgan joy Error qaytaradi, xuddi throw new Error() kabi.
Bu holatda biz funksiya ichida try...catch'ni yoki funksiya chaqirilganda .catch()'ni ishlatsak bo'ladi.
Bunisi sizga vazifa bo'laqolsin.
Funksiya ichiga ushbu kodni yozing:
const rejects = await Promise.reject('rejected');
va kelgan rejection xabarini alert qiling. Sizda tepada aytganimdek 2 ta tanlov bor.
Omad.
Mana Azizlar, async/await mavzusini ham tugatdik va shu bilan Asinxron JavaScript mavzusini ham o'z nihoyasiga yetkazdik.
Alloh ilmimizni yana ziyoda qilsin.