Ce face Promise / then
O Promise (promisiune) este un obiect care va primi un rezultat în viitor. Ea este fie împlinită (cu resolve), fie respinsă cu o eroare (cu reject).
Cu .then() spui ce faci cu rezultatul, cu .catch() tratezi eroarea, iar .finally() rulează în ambele cazuri. Promise.all așteaptă mai multe promisiuni în paralel.
În codul nou, promisiunile se folosesc de obicei cu async și await, care sunt mai ușor de citit.
Ce returnează
Un obiect Promise.
Exemple
Exemplul 1: O promisiune împlinită și una respinsă
function verificaStoc(produs, stoc) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (stoc > 0) resolve(`${produs}: ${stoc} bucăți`);
else reject(new Error(`${produs} nu mai este în stoc`));
}, 100);
});
}
verificaStoc("Laptop", 4)
.then((mesaj) => console.log(mesaj))
.catch((eroare) => console.log(eroare.message));
verificaStoc("Monitor", 0)
.then((mesaj) => console.log(mesaj))
.catch((eroare) => console.log(eroare.message));
Rezultat
Laptop: 4 bucăți
Monitor nu mai este în stoc
Exemplul 2: Mai multe promisiuni deodată cu Promise.all
const pauza = (ms, valoare) => new Promise((resolve) => setTimeout(() => resolve(valoare), ms));
Promise.all([pauza(300, "utilizatori"), pauza(100, "articole")]).then((rezultate) => {
console.log(rezultate);
});
Rezultat
[ 'utilizatori', 'articole' ]
Greșeli frecvente
- Uiți
.catch(). O promisiune respinsă și netratată afișeazăUncaught (in promise)în consolă, iar în Node.js oprește programul. - Uiți
returnîntr-un.then()cu acolade, iar următorul.then()primeșteundefined.
Comenzi înrudite
async / await: Scrie cod asincron care se citește ca un cod obișnuit, de sus în jos.fetch: Trimite o cerere HTTP la un server și primește răspunsul, fără reîncărcarea paginii.setTimeout / setInterval: Rulează o funcție după o pauză (setTimeout) sau în mod repetat, la intervale egale (setInterval).