JavaScript-da Sinxron Uslubda Promiselar

Promise hell muammosini hal qilish uchun alohida promis sintaksisi ixtiro qilindi, bu asinxron kodni ancha oson - sinxron uslubda yozish imkonini beradi.

Keling, uni o'rganishni boshlaymiz. Boshlash uchun oldingi darsdan kodni olaylik:

javascriptfunction func() {
  getSmth(2).then(res => {
    console.log(res); // 4 ni chiqaradi
  });
}

func();

Agar bizning getSmth funksiyamiz sinxron bo'lsa, func funksiyasining kodini quyidagicha qayta yozishimiz mumkin edi:

javascriptfunction func() {
  let res = getSmth(2);
  console.log(res); // 4 ni chiqaradi
}

getSmth funksiyasi, biroq, asinxron, shuning uchun yuqoridagi kod ishlamaydi. Ammo, promiselarning sinxron uslubidan foydalanib, biz shunga o'xshash narsani olamiz. Buni qilaylik.

Boshlash uchun biz o'zimizning funksiyamizni func maxsus async buyrug'i yordamida asinxron deb e'lon qilishimiz kerak:

javascriptasync function func() {
  
}

Shundan so'ng, biz func funksiyasi ichida maxsus await buyrug'idan foydalanishimiz mumkin. Promise oldiga yozilgan ushbu buyruq JavaScript-ning promise bajarilgunicha kutishiga sabab bo'ladi. Shundan so'ng buyruq promisening natijasini qaytaradi, va kod bajarilishi davom etadi.

Bizning holatda, biz getSmth chaqiruvi oldidan await yozishimiz kerak. Chunki ushbu funksiyani chaqirish natijasi promise bo'ladi, shuning uchun kodning keyingi bajarilishi faqat ushbu promise bajarilgandan keyin davom etadi. Xo'sh, promisening natijasini o'zgaruvchiga yozish mumkin. Keling, tavsiflanganlarni bajaramiz:

javascriptasync function func() {
  let res = await getSmth(2);
  console.log(res); // 4 ni chiqaradi
}

func();

Keling, getSmth ni bir necha marta chaqiraylik:

javascriptasync function func() {
  let res1 = await getSmth(2);
  let res2 = await getSmth(3);
  
  console.log(res1 + res2); // 13 ni chiqaradi
}

func();

Endi getSmth ni tsiklda chaqiramiz:

javascriptasync function func() {
  let arr = [1, 2, 3, 4, 5];
  let sum = 0;
  
  for (let elem of arr) {
    sum += await getSmth(elem);
  }
  
  console.log(sum);
}

func();
Задание 1

Quyidagi kodni sinxron sintaksis orqali qayta yozing:

javascriptfunction func() {
  getSmth(2).then(res1 => {
    getSmth(3).then(res2 => {
      getSmth(4).then(res3 => {
        console.log(res1 + res2 + res3);
      });
    });
  });
}

func();