Stările unei promisiuni în JavaScript
O promisiune poate fi într-una din cele trei stări. La creare, promisiunea este în așteptare (pending), apoi poate deveni îndeplinită (fulfilled), returnând rezultatul obținut, sau respinsă (rejected), returnând motivul eșecului. Puteți observa tranziția dintr-o stare în alta rulând următorul cod:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false; // setați fie true, fie false
if (!isError) {
resolve([1, 2, 3, 4, 5]);
} else {
reject('error in promise');
}
}, 3000);
});
setInterval(function() {
console.log(promise); // la fiecare secundă afișăm promisiunea în consolă
}, 1000);
Rețineți că stările fulfilled și rejected sunt imuabile: dacă o promisiune a trecut într-una din aceste stări, atunci nu va mai putea să treacă în cealaltă. Să vedem un exemplu. În următorul cod, apelul reject se va întâmpla mai devreme, deci apelul resolve va fi ignorat:
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error('error')), 1000);
setTimeout(() => resolve('ignored'), 2000);
});
Creați o promisiune care se va împlini cu succes după un anumit timp. Afișați-o în consolă și studiați starea sa inițială și cea finală.
Creați o promisiune care va eșua după un anumit timp. Afișați-o în consolă și studiați starea sa inițială și cea finală.