Sobes.tech
Junior

Milliseid Promise tüüpe tead?

sobes.tech AI

Vastus AI-lt

Node.js peamised lubaduste tüübid:

  • Põhilubadus: Esindab konteinerit tulevaste väärtuste või vigade jaoks. Sellel on kolm olekut: pending (ootab), fulfilled (õnnestunud täitmine), rejected (tagasilükkamine veaga). Loobub new Promise() konstruktoriga:

    // Põhilubaduse loomine
    const myPromise = new Promise((resolve, reject) => {
      // Asünkroonne operatsioon
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("Operatsioon edukalt lõpetatud");
        } else {
          reject("Viga tekkis");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Loob lubaduse, mis kohe liigub fulfilled olekusse määratud väärtusega:

    // Lahendatud lubaduse loomine
    const resolvedPromise = Promise.resolve("See on juba täidetud lubadus");
    
  • Promise.reject(): Loob lubaduse, mis kohe liigub rejected olekusse määratud vea põhjusega:

    // Tagasilükatud lubaduse loomine
    const rejectedPromise = Promise.reject(new Error("See on tagasilükatud lubadus"));
    
  • Promise.all(): Võtab vastu lubaduste massiivi ja tagastab uue lubaduse. See uus lubadus läheb fulfilled olekusse, kui kõik lubadused on edukalt lõpetatud. Väärtus on tulemuste massiiv, samas järjekorras nagu sisendlubadused. Kui ükskõik lubadustest ebaõnnestub, siis Promise.all() lükkab kohe tagasi esimese ebaõnnestunud lubaduse põhjusega:

    // Promise.all() kasutamine
    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 on [1, 2, 3]
      })
      .catch((error) => {
        // Vigade töötlemine
      });
    
  • Promise.allSettled(): Võtab vastu lubaduste massiivi ja tagastab uue lubaduse. See uus lubadus läheb fulfilled või rejected olekusse, kui kõik lubadused on lõpetatud. Väärtus on objektide massiiv, mis kirjeldab iga lubaduse tulemust:

    // Promise.allSettled() kasutamine
    const promiseA = Promise.resolve("õnnestumine");
    const promiseB = Promise.reject("viga");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results on objektide massiiv:
        // [{status: 'fulfilled', value: 'õnnestumine'}, {status: 'rejected', reason: 'viga'}]
      });
    
  • Promise.race(): Võtab vastu lubaduste massiivi ja tagastab uue lubaduse. See uus lubadus läheb fulfilled või rejected olekusse, kui esimene lubadus massiivist, mis või siis edukalt lõpetab, või siis tagasilükkub:

    // Promise.race() kasutamine
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Ma olen kiire!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Ma olen aeglane..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value on "Ma olen kiire!"
      });
    
  • Promise.any(): Võtab vastu lubaduste massiivi ja tagastab uue lubaduse. See uus lubadus läheb fulfilled olekusse, kui esimene edukalt lõpetatud lubadus leitakse. Kui kõik lubadused on tagasilükatud, tagastab Promise.any() vea AggregateError, mis sisaldab kõiki tagasilükatud lubaduste põhjuseid. Saadaval alates Node.js 12:

    // Promise.any() kasutamine
    const promiseFail1 = Promise.reject("Viga 1");
    const promiseSuccess = Promise.resolve("Õnnestumine!");
    const promiseFail2 = Promise.reject("Viga 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value on "Õnnestumine!"
      })
      .catch((error) => {
        // Töötlemine `AggregateError`-iga, kui kõik lubadused on tagasilükatud
      });