Krijimi i Premtimeve të Përmbushura në JavaScript
Ndonjëherë mund t'ju duhet të krijoni një premisë tashmë
të përmbushur. Për këtë ekzistojnë
dy metoda: metoda Promise.resolve
krijon një premisë të përmbushur me sukses, Promise.reject
krijon një premisë të refuzuar. Si parametër këto
metoda marrin atë që do të bëhet rezultati
ose gabimi i premisës përkatësisht.
Kur mund të na duhet një premisë e përmbushur tashmë? Le të shohim një shembull. Le të themi se kemi një funksion që si parametër pranon një numër, bën diçka me të në mënyrë asinkrone dhe kthen një premisë me rezultatin:
function func(num) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
}
Ne do të përdorim funksionin tonë në mënyrën e mëposhtme:
func(5).then(function(res) {
console.log(res); // do të shfaqë 25
});
Le të themi tani që kemi vendosur që operacionin tonë asinkron do ta kryejmë vetëm nëse është dhënë një numër më i madh se zero. Përndryshe rezultati i funksionit duhet të jetë zero:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else {
return 0; // rezultat zero
}
}
Megjithatë, tani del se funksioni kthen
ose një premisë, ose një numër. Për shkak të kësaj ne nuk
mund të aplikojmë më metodën then në rezultatin
e funksionit, sepse në rastin e kthimit të një numri nga funksioni
do të marrim një gabim:
func(0).then(function(res) { // gabim, po aplikojmë metodën then në zero
});
Të rregulluar problemin do të na ndihmojë Promise.resolve:
function func(num) {
if (num > 0) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(num * num);
}, 3000);
});
} else {
return Promise.resolve(0); // kthejmë një premisë, jo një numër
}
}
Le të themi tani që kemi vendosur që për numrin e dhënë
zero duhet të kthejmë zero, kurse për numrat
më të vegjël se zero - një përjashtim. Në këtë do të na ndihmojë
metoda Promise.reject:
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('numër i pasaktë'); // kthejmë një premisë të refuzuar
}
}