JavaScript-da Işlenen Promiselary Döretmek
Käwagt siz eýýäm ýerine ýetirilen promis döretmek isläp bilersiňiz.
Bun üçin iki usul bar: Promise.resolve usuly üstünlikli
ýerine ýetirilen promis döredýär, Promise.reject usuly bolsa
inkär edilen promis döredýär. Bu usullar parametr hökmünde promisiň
netijesi ýa-da ýalňyşlygy boljak zady alýarlar.
Eýýäm ýerine ýetirilen promis haçan gerek bolar? Mysal üçin göreli. Bizde bir san parametri alýan, oňa asinhron ýagdaýda bir zat edýän we netijesi bilen promis gaýtaryan funksiýa bar bolsun:
function func(num) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
}
Funksiýamyzdan aşakdaky ýaly peýdalanyp bolarys:
func(5).then(function(res) {
console.log(res); // 25-ni görkezer
});
Indi diýeliň biz karar berdik, asinhron amalymyzy diňe noldan uly san berlen bolsa ýerine ýetireris. Beýle däl ýagdaýda funksiýanyň netijesi nol bolmaly:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else {
return 0; // nol netije
}
}
Emma indi funksiýa ýa promis ýa-da san gaýtarýar. Şonuň üçin funksiýanyň
netijesine then metodyny ulanyp bolmaýar, sebäbi funksiýa san
gaýtaran ýagdaýda, biz ýalňyşlyk alarys:
func(0).then(function(res) { // ýalňyş, nola then metodyny ulanýarys
});
Bu meseläni Promise.resolve çözer:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else {
return Promise.resolve(0); // san däl-de promis gaýtarýarys
}
}
Indi diýeliň biz karar berdik, berlen nol üçin noly, noldan kiçi sanlar
üçin bolsa çäklendirmäni gaýtarmaly. Bize Promise.reject usuly
kömek eder:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else if (num === 0) {
return Promise.resolve(0);
} else {
return Promise.reject('nädogry san'); // inkär edilen promis gaýtarýarys
}
}