Poikkeustilanteet promisseissa JavaScriptissä
Opitaan nyt käsittelemään promisissa tapahtuneita poikkeustilanteita. Tällaisen tilanteen sattuessa meidän tulee hylätä promisi käyttämällä erityistä hylkäämisfunktiota, joka automaattisesti siirtyy promisin funktion toiseen parametriin:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
...
}, 3000);
});
Promisin funktion sisällä meidän tulee kutsua
resolve, jos kaikki sujui normaalisti, tai
reject, jos tapahtui poikkeustilanne:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false;
if (!isError) {
resolve([1, 2, 3, 4, 5]); // promisin data
} else {
reject('error in promise'); // virhetekstisi
}
}, 3000);
});
Sitten then-metodissa sinun tulee
passata parametreina ei yhtä, vaan kaksi funktiota: ensimmäinen toimii,
jos promisi suoritettiin normaalisti (resolved),
ja toinen - jos se suoritettiin virheellisesti (rejected):
promise.then(
function(result) {
console.log(result); // tulostaa promisin tuloksen
},
function(error) {
console.log(error); // tulostaa virhetekstin
}
);
Yleensä edellä esitetty koodi kirjoitetaan kompaktimmin, näin:
promise.then(function(result) {
console.log(result); // tulostaa promisin tuloksen
}, function(error) {
console.log(error); // tulostaa virhetekstin
});
Tee asynkroninen koodi, joka generoi
satunnaislukuja välillä 0 - 5.
Kääri kaikki tämä promisiin. Anna promisin palauttaa tuloksenaan
yksikön jakamisen tulos generoidulla luvulla.
Anna promisin suorittua virheellä,
jos tapahtui jako nollalla, ja onnistuneesti
kaikissa muissa tapauksissa.