Promise-tilstande i JavaScript
Et promise kan være i en af tre tilstande. Ved oprettelse er promise i afventende tilstand (pending), og kan derefter blive opfyldt (fulfilled) og returnere det opnåede resultat, eller afvist (rejected) og returnere årsagen til afvisningen. Du kan se overgangen fra en tilstand til en anden ved at køre følgende kode:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false; // sæt enten true eller false
if (!isError) {
resolve([1, 2, 3, 4, 5]);
} else {
reject('fejl i promise');
}
}, 3000);
});
setInterval(function() {
console.log(promise); // hvert sekund udskriver vi promise til konsollen
}, 1000);
Bemærk, at tilstandene fulfilled og rejected er uforanderlige: hvis et promise er skiftet til en af disse tilstande, kan det ikke længere skifte til en anden. Lad os se på et eksempel. I følgende kode vil kaldet til reject ske først, derfor vil kaldet til resolve blive ignoreret:
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error('fejl')), 1000);
setTimeout(() => resolve('ignoreret'), 2000);
});
Lav et promise, der vil blive opfyldt med succes efter et stykke tid. Udskriv det til konsollen og undersøg dets starttilstand og afsluttede tilstand.
Lav et promise, der vil blive afvist efter et stykke tid. Udskriv det til konsollen og undersøg dets starttilstand og afsluttede tilstand.