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();
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();