Promisen tilat JavaScriptissä
Promisi voi olla yhdessä kolmesta tilasta. Luomisen yhteydessä promisi on odottavassa tilassa (pending), ja sitten siitä voi tulla täytetty (fulfilled), palauttaen saadun tuloksen, tai hylätty (rejected), palauttaen hylkäyksen syyn. Voit nähdä siirtymisen yhdestä tilasta toiseen suorittamalla seuraavan koodin:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false; // aseta joko true tai false
if (!isError) {
resolve([1, 2, 3, 4, 5]);
} else {
reject('error in promise');
}
}, 3000);
});
setInterval(function() {
console.log(promise); // tulostamme promisin konsoliin joka sekunti
}, 1000);
Huomaa, että tilat fulfilled ja rejected ovat muuttumattomia: jos promisi on siirtynyt yhteen näistä tiloista, se ei voi enää siirtyä toiseen. Katsotaanpa esimerkkiä. Seuraavassa koodissa reject -kutsu tapahtuu aiemmin, joten resolve -kutsua ei huomioida:
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error('error')), 1000);
setTimeout(() => resolve('ignored'), 2000);
});
Tee promisi, joka suoritetaan onnistuneesti jonkin ajan kuluttua. Tulosta se konsoliin ja tutki sen alkutila ja valmistunut tila.
Tee promisi, joka epäonnistuu jonkin ajan kuluttua. Tulosta se konsoliin ja tutki sen alkutila ja valmistunut tila.