JavaScript-da Ýürrüş Düzgüninde Promiseler

Promise hell meselesini çözmek üçin, asenkron kody has aňsat - ýürrüş düzgüninde ýazmaga mümkinçilik berýän ýörite promiseler sintaksisi düşünildi.

Geliň ony öwrenmäge başlalyň. Ilki bilen öňki sapakdaky kody alalyň:

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

func();

getSmth funksiýamyz ýürrüşli bolsa, func funksiýasynyň kodyny aşakdaky ýaly ýazyp bilerdik:

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

getSmth funksiýasy, şeýle-de bolsa, asenkron, şonuň üçin ýokarda görkezilen kod işlemez. Ýöne, promiseleriň ýürrüş düzgüninden peýdalanyp, bize meňzeş bir zat alarys. Geliň muny edeliň.

Ilki bilen, biz öz funksiýamyzy func ýörite buýruk async bilen asenkron diýip yglan etmelidiris:

javascriptasync function func() {
  
}

Şondan soň, biz func funksiýasynyň içinde ýörite buýruk await ulanup bilersiňiz. Bu buýruk, promisden öň ýazylan, JavaScript-i promis ýerine ýetirilýänçä garaşmaga mejbur eder. Şondan soň buýruk promisiň netijesini gaýtarar, we kod ýerine ýetirilmegi dowam eder.

Bizim ýagdaýymyzda, biz await getSmth çakylyşyndan öň ýazmalydyrys. Bu funksiýanyň çakylyşynyň netijesi promis bolany üçin, kod ýerine ýetirilmegi diňe şol promisiň ýerine ýetirilmeginden soň dowam eder. Bolşoňa, promisiň netijesini üýtgeýjä ýazyp bolýar. Geliň beýan edileni edeliň:

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

func();

Geliň getSmth birnäçe gezek çagyrýalyň:

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

func();

Indi bolsa, getSmth siklde çagyryp göreliň:

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

Aşakdaky kody ýürrüş sintaksisi arkaly gaýtadan ýazyň:

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

func();