Erandolukorrad JavaScript'i lubadustes
Õpime nüüd töötlema erandolukordi, mis on tekkinud lubaduse sees. Sellise olukorra tekkimisel peame lubaduse tagasi lükkama spetsiaalse tagasilükkamise funktsiooni abil, mis automaatselt satub lubaduse funktsiooni teise parameetrisse:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
...
}, 3000);
});
Lubaduse funktsiooni sees peame kutsuma
resolve, kui kõik läks tavapäraselt, või
reject, kui tekkis erandolukord:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false;
if (!isError) {
resolve([1, 2, 3, 4, 5]); // lubaduse andmed
} else {
reject('error in promise'); // teie veatekst
}
}, 3000);
});
Seejärel meetodis then peaksite
parametritena edastama mitte ühe, vaid kaks funktsiooni: esimene töötab,
kui lubadus töötas tavapäraselt (resolved),
ja teine - kui töötas veaga (rejected):
promise.then(
function(result) {
console.log(result); // kuvab lubaduse tulemuse
},
function(error) {
console.log(error); // kuvab veateksti
}
);
Reeglina kirjutatakse ülaltoodud kood kompaktsemalt, niimoodi:
promise.then(function(result) {
console.log(result); // kuvab lubaduse tulemuse
}, function(error) {
console.log(error); // kuvab veateksti
});
Koostage asünkroonne kood, mis genereerib
juhuslikke numbreid 0 kuni 5.
Mähige kõik see lubadusse. Olgu lubaduse tulemuseks
ühe jagamise tulemus genereeritud
numbriga. Olgu lubadus täidetud veaga,
kui toimub jagamine nulliga, ja edukalt
kõigil muudel juhtudel.