JavaScript async va await
Promise zanjiri callback’dan yaxshi, lekin baribir
then ichida yoziladi. async/await esa asinxron kodni oddiy ketma-ket
kod kabi yozishga imkon beradi.
then va await — bir xil ish
await Promise oldiga qo’yiladi va uning natijasini beradi — then
callback’i shart emas.
async funksiya Promise qaytaradi
return 42 yozilsa ham, tashqaridan qaralganda Promise chiqadi — async
qiymatni avtomatik o’raydi.
Zanjir o’rniga ketma-ket kod
Oldingi darsdagi uch qadamli zanjirni solishtiring:
then yo’q, ichma-ich qavs yo’q — kod yuqoridan pastga o’qiladi. Aynan shu
sabab async/await bugungi standart usul.
Xatoni try/catch bilan ushlash
await bilan try/catch to’g’ridan-to’g’ri ishlaydi:
Rad etilgan Promise await da xatoga aylanadi — sinxron koddagi bilan
bir xil tarzda ushlanadi.
Parallel bajarish — muhim nuqta
Ketma-ket await — ketma-ket kutish demak:
~900 ms ketdi. Bu uchta amal bir-biriga bog’liq bo’lmasa — isrof.
Promise.all bilan parallel:
~300 ms — uch barobar tez. Natijani destructuring bilan ajratib olindi.
Siklda await
for...of bilan await kutiladi. Ammo forEach bilan ishlamaydi:
forEach callback’ning Promise’ini kutmaydi. Kutish kerak bo’lsa —
for...of, parallel kerak bo’lsa — map + Promise.all.
Amaliy mashq
- 1 soniya kutib matn qaytaradigan
asyncfunksiya yozing; - uni
awaitbilan chaqirib, natijani chiqaring; - rad etiladigan Promise’ni
try/catchbilan ushlang; - uchta kechikishni ketma-ket, so’ng
Promise.allbilan bajarib, vaqtni solishtiring; for...ofichidaawaitishlating;- shu siklni
forEachga almashtirib, tartib buzilishini ko’ring.
4- va 6-qadamlar async/await dagi ikki asosiy tuzoqni ko’rsatadi.
Qisqacha xulosa
asyncfunksiya har doim Promise qaytaradi.awaitPromise natijasini kutadi va qiymatini beradi.- Rad etilgan Promise
awaitda xatoga aylanadi —try/catchushlaydi. - Ketma-ket
awaitvaqtni qo’shadi; bog’liq bo’lmagan amallar uchunPromise.allishlating. for...ofawaitni kutadi,forEach— yo’q.
Keyingi darsda fetch — serverdan haqiqiy ma’lumot olish.