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ň:
function 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:
function 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:
async 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ň:
async function func() {
let res = await getSmth(2);
console.log(res); // 4 çykarar
}
func();
Geliň getSmth birnäçe gezek çagyrýalyň:
async 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ň:
async 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ň:
function func() {
getSmth(2).then(res1 => {
getSmth(3).then(res2 => {
getSmth(4).then(res3 => {
console.log(res1 + res2 + res3);
});
});
});
}
func();