Skip to content

Cum sa folosesti Promise-uri in JavaScript

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum sa folosesti Promise. We cover key concepts, practical examples, and best practices.

Promise-urile reprezinta valoarea unei operatii asincrone care poate fi rezolvata sau respinsa in viitor. Acest ghid iti arata cum sa folosesti corect then, catch, finally si Promise.all.

Quick Fix

1. Crearea unui Promise

Un Promise primeste o functie executor cu resolve si reject:

const fetchData = new Promise((resolve, reject) => {
    const success = true;
    setTimeout(() => {
        if (success) resolve('Date incarcate');
        else reject('Eroare la incarcare');
    }, 1000);
});

2. Consumarea cu then si catch

then() primeste rezultatul, catch() prinde eroarea:

fetchData
    .then(data => console.log(data))
    .catch(error => console.error(error));
Date incarcate

3. Chaining promises

Poti lantui mai multe then()-uri:

const getUser = id => Promise.resolve({ id, name: 'Ion' });
const getPosts = user => Promise.resolve([{ title: 'Post 1' }]);

getUser(1)
    .then(user => getPosts(user))
    .then(posts => console.log(posts))
    .catch(err => console.error(err));
[{ title: 'Post 1' }]

4. Promise.all pentru executie paralela

Promise.all() ruleaza mai multe promise-uri in paralel:

const promise1 = Promise.resolve(10);
const promise2 = new Promise(r => setTimeout(() => r(20), 100));
const promise3 = fetch('https://api.example.com/data')
    .then(res => res.json())
    .catch(() => ({ mock: true }));

Promise.all([promise1, promise2, promise3])
    .then(([result1, result2, result3]) => {
        console.log('Toate promise-urile s-au rezolvat:', result1, result2, result3);
    });
Toate promise-urile s-au rezolvat: 10 20 { mock: true }

5. finally pentru cleanup

finally() se executa indiferent de rezultat:

function loadData() {
    showLoader();
    return fetchData()
        .then(data => displayData(data))
        .catch(err => showError(err))
        .finally(() => hideLoader());
}

Prevention

  • Returneaza intotdeauna promise-uri in lant pentru a pastra fluxul
  • Adauga .catch() la finalul fiecarui lant de promise-uri
  • Foloseste Promise.all() pentru operatii independente paralele
  • Foloseste finally() pentru cleanup (ascunde loader, inchide conexiuni)

Common Mistakes

  1. A nu returna promise-ul in lant -- fara return, urmatorul then() primeste undefined
  2. A uita catch-ul -- promise-urile nerejectate cauzeaza erori silentioase sau unhandled rejections
  3. A crea promise-uri anidate in loc de lant -- duce la "callback hell" cu promise-uri
  4. A confunda Promise.all cu Promise.allSettled -- all respinge la prima eroare, allSettled asteapta toate
  5. A nu sti ca Promise.all respinge imediat -- daca un promise respinge, intregul grup respinge

FAQ

### Ce diferenta este intre Promise.all si Promise.race?

Promise.all asteapta toate promise-urile, Promise.race se rezolva la primul promise care se rezolva (oricare ar fi acela).

Cum convertesc un callback la Promise?

Foloseste new Promise((resolve, reject) => { fs.readFile(path, (err, data) => { if (err) reject(err); else resolve(data); }); }).

Ce este un "unhandled promise rejection"?

Apare cand un Promise este respins dar nu exista niciun .catch() atasat. In medii moderne, acest lucru poate crapa aplicatia.

Construit de dezvoltatorii Doda Browser, DodaZIP si Durga Antivirus Pro. Instrumentele DodaTech se integreaza perfect cu JavaScript pentru productivitate si securitate sporite.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro