Sobes.tech
Junior

Ce tipuri de Promise cunoști?

sobes.tech AI

Răspuns de la AI

Tipurile principale de promisiuni în Node.js:

  • Promise de bază: Un container pentru valori sau erori viitoare. Are trei stări: pending (în așteptare), fulfilled (completat cu succes), rejected (respins cu eroare). Se creează cu constructorul new Promise().

    // Crearea unei promisiuni de bază
    const myPromise = new Promise((resolve, reject) => {
      // Operație asincronă
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("Operațiune finalizată cu succes");
        } else {
          reject("A apărut o eroare");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Creează o promisiune care trece imediat în starea fulfilled cu o valoare dată.

    // Crearea unei promisiuni rezolvate
    const resolvedPromise = Promise.resolve("Aceasta este deja o promisiune îndeplinită");
    
  • Promise.reject(): Creează o promisiune care trece imediat în starea rejected cu motivul erorii.

    // Crearea unei promisiuni respinse
    const rejectedPromise = Promise.reject(new Error("Aceasta este o promisiune respinsă"));
    
  • Promise.all(): Primește un array de promisiuni și returnează o nouă promisiune. Această nouă promisiune trece în starea fulfilled când toate promisiunile din array sunt finalizate cu succes. Valoarea va fi un array de rezultate în aceeași ordine ca și promisiunile de intrare. Dacă oricare promisiune este respinsă, Promise.all() este respinsă imediat cu motivul primei promisiuni respinse.

    // Utilizarea Promise.all()
    const promise1 = Promise.resolve(1);
    const promise2 = Promise.resolve(2);
    const promise3 = new Promise((resolve, reject) => setTimeout(() => resolve(3), 100));
    Promise.all([promise1, promise2, promise3])
      .then((values) => {
        // values va fi [1, 2, 3]
      })
      .catch((error) => {
        // Tratarea erorilor
      });
    
  • Promise.allSettled(): Primește un array de promisiuni și returnează o nouă promisiune. Această nouă promisiune trece în starea fulfilled când toate promisiunile sunt fie finalizate cu succes (fulfilled), fie respinse (rejected). Valoarea va fi un array de obiecte care descriu rezultatul fiecărei promisiuni (stare și valoare/motiv). Spre deosebire de Promise.all(), nu se respinge imediat.

    // Utilizarea Promise.allSettled()
    const promiseA = Promise.resolve("succes");
    const promiseB = Promise.reject("eroare");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results va fi un array de obiecte:
        // [{status: 'fulfilled', value: 'succes'}, {status: 'rejected', reason: 'eroare'}]
      });
    
  • Promise.race(): Primește un array de promisiuni și returnează o nouă promisiune. Această nouă promisiune trece în starea fulfilled sau rejected cu rezultatul/motivul primei promisiuni din array care s-a finalizat cu succes sau a fost respins.

    // Utilizarea Promise.race()
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Sunt rapid!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Sunt lent..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value va fi "Sunt rapid!"
      });
    
  • Promise.any(): Primește un array de promisiuni și returnează o nouă promisiune. Această promisiune trece în starea fulfilled cu valoarea primei promisiuni care s-a finalizat cu succes. Dacă toate promisiunile sunt respinse, Promise.any() returnează o eroare AggregateError care conține motivele tuturor promisiunilor respinse. Disponibil începând cu Node.js 12.

    // Utilizarea Promise.any()
    const promiseFail1 = Promise.reject("Eroare 1");
    const promiseSuccess = Promise.resolve("Succes!");
    const promiseFail2 = Promise.reject("Eroare 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value va fi "Succes!"
      })
      .catch((error) => {
        // Tratarea erorii AggregateError dacă toate promisiunile sunt respinse
      });