Stati di una Promise in JavaScript
Una Promise può trovarsi in uno dei tre stati. Alla creazione, la Promise è in attesa (pending), per poi diventare soddisfatta (fulfilled), restituendo il risultato ottenuto, o rifiutata (rejected), restituendo la motivazione del fallimento. Puoi osservare la transizione da uno stato all'altro, eseguendo il seguente codice:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false; // imposta true o false
if (!isError) {
resolve([1, 2, 3, 4, 5]);
} else {
reject('errore nella promise');
}
}, 3000);
});
setInterval(function() {
console.log(promise); // ogni secondo stampiamo la promise in console
}, 1000);
Tieni presente che gli stati fulfilled e rejected sono immutabili: se una Promise è passata in uno di questi stati, non potrà più passare nell'altro. Vediamo un esempio. Nel codice seguente la chiamata reject avverrà prima, quindi la chiamata resolve sarà ignorata:
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error('errore')), 1000);
setTimeout(() => resolve('ignorato'), 2000);
});
Crea una Promise che si risolverà con successo dopo un certo tempo. Stampala in console e studia il suo stato iniziale e quello finale.
Crea una Promise che verrà rifiutata dopo un certo tempo. Stampala in console e studia il suo stato iniziale e quello finale.