Promise-tilstander i JavaScript
Et promise kan være i en av tre tilstander. Ved opprettelse er promise i ventemodus (pending), og kan deretter bli oppfylt (fulfilled), og returnere det oppnådde resultatet, eller avvist (rejected), og returnere årsaken til avvisning. Du kan se overgangen fra en tilstand til en annen ved å kjøre følgende kode:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false; // sett enten true eller false
if (!isError) {
resolve([1, 2, 3, 4, 5]);
} else {
reject('error in promise');
}
}, 3000);
});
setInterval(function() {
console.log(promise); // hvert sekund skriver vi promise til konsollen
}, 1000);
Vær oppmerksom på at tilstandene fulfilled og rejected er uforanderlige: hvis promise har gått over til en av disse tilstandene, kan den ikke lenger gå over til en annen. La oss se på et eksempel. I følgende kode vil kallet til reject skje først, derfor vil kallet til resolve bli ignorert:
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error('error')), 1000);
setTimeout(() => resolve('ignored'), 2000);
});
Lag et promise som vil bli oppfylt med suksess om en stund. Skriv det til konsollen og studer dens opprinnelige tilstand og fullført tilstand.
Lag et promise som vil mislykkes om en stund. Skriv det til konsollen og studer dens opprinnelige tilstand og fullført tilstand.