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

JavaScript

await Promise oldiga qo’yiladi va uning natijasini beradi — then callback’i shart emas.

async funksiya Promise qaytaradi

JavaScript

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:

JavaScript

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:

JavaScript

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:

JavaScript

~900 ms ketdi. Bu uchta amal bir-biriga bog’liq bo’lmasa — isrof.

Promise.all bilan parallel:

JavaScript

~300 ms — uch barobar tez. Natijani destructuring bilan ajratib olindi.

Siklda await

JavaScript

for...of bilan await kutiladi. Ammo forEach bilan ishlamaydi:

JavaScript

forEach callback’ning Promise’ini kutmaydi. Kutish kerak bo’lsa — for...of, parallel kerak bo’lsa — map + Promise.all.

Amaliy mashq

  1. 1 soniya kutib matn qaytaradigan async funksiya yozing;
  2. uni await bilan chaqirib, natijani chiqaring;
  3. rad etiladigan Promise’ni try/catch bilan ushlang;
  4. uchta kechikishni ketma-ket, so’ng Promise.all bilan bajarib, vaqtni solishtiring;
  5. for...of ichida await ishlating;
  6. shu siklni forEach ga almashtirib, tartib buzilishini ko’ring.

4- va 6-qadamlar async/await dagi ikki asosiy tuzoqni ko’rsatadi.

Qisqacha xulosa

  • async funksiya har doim Promise qaytaradi.
  • await Promise natijasini kutadi va qiymatini beradi.
  • Rad etilgan Promise await da xatoga aylanadi — try/catch ushlaydi.
  • Ketma-ket await vaqtni qo’shadi; bog’liq bo’lmagan amallar uchun Promise.all ishlating.
  • for...of await ni kutadi, forEach — yo’q.

Keyingi darsda fetch — serverdan haqiqiy ma’lumot olish.

Bu dars foydali bo'ldimi?

marta ko'rildi