Sobes.tech
Junior

Kokius Promise tipus žinai?

sobes.tech AI

Atsakymas iš AI

Pagrindiniai „Node.js“ pažadų tipai:

  • Pagrindinis pažadas: Yra konteineris būsimoms reikšmėms arba klaidoms. Jame yra trys būsenos: pending (laukiama), fulfilled (sėkmingai įvykdyta), rejected (atmetama su klaida). Sukuriama naudojant new Promise() konstruktorių:

    // Pagrindinio pažado kūrimas
    const myPromise = new Promise((resolve, reject) => {
      // Asinchroninė operacija
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("Operacija sėkmingai užbaigta");
        } else {
          reject("Įvyko klaida");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Sukuria pažadą, kuris nedelsiant pereina į fulfilled būseną su nurodyta verte:

    // Išsprendusio pažado kūrimas
    const resolvedPromise = Promise.resolve("Tai jau įvykdytas pažadas");
    
  • Promise.reject(): Sukuria pažadą, kuris nedelsiant pereina į rejected būseną su nurodyta klaidos priežastimi:

    // Atmesto pažado kūrimas
    const rejectedPromise = Promise.reject(new Error("Tai atmestas pažadas"));
    
  • Promise.all(): Priima pažadų masyvą ir grąžina naują pažadą. Šis naujas pažadas pereina į fulfilled būseną, kai visi pažadai sėkmingai užbaigiami. Vertė bus rezultatų masyvas, tokia pati tvarka kaip įvesties pažadai. Jei bet kuris pažadas nepavyksta, Promise.all() nedelsiant atmestas pirmojo nepavykusio pažado priežastimi:

    // Naudojant 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 bus [1, 2, 3]
      })
      .catch((error) => {
        // Klaidų apdorojimas
      });
    
  • Promise.allSettled(): Priima pažadų masyvą ir grąžina naują pažadą. Šis naujas pažadas pereina į fulfilled arba rejected būseną, kai visi pažadai užbaigiami. Vertė bus objektų masyvas, aprašantis kiekvieno pažado rezultatą:

    // Promise.allSettled() naudojimas
    const promiseA = Promise.resolve("sėkmė");
    const promiseB = Promise.reject("klaida");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results bus objektų masyvas:
        // [{status: 'fulfilled', value: 'sėkmė'}, {status: 'rejected', reason: 'klaida'}]
      });
    
  • Promise.race(): Priima pažadų masyvą ir grąžina naują pažadą. Šis naujas pažadas pereina į fulfilled arba rejected būseną, kai pirmas pažadas iš masyvo, kuris arba sėkmingai užbaigiasi, arba atmestas:

    // Promise.race() naudojimas
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Aš greitas!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Aš lėtai..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value bus "Aš greitas!"
      });
    
  • Promise.any(): Priima pažadų masyvą ir grąžina naują pažadą. Šis naujas pažadas pereina į fulfilled būseną su pirmojo sėkmingai užbaigto pažado verte. Jei visi pažadai atmesti, Promise.any() grąžina klaidą AggregateError, kuri apima visų atmestų pažadų priežastis. Prieinama nuo Node.js 12:

    // Promise.any() naudojimas
    const promiseFail1 = Promise.reject("Klaida 1");
    const promiseSuccess = Promise.resolve("Sėkmė!");
    const promiseFail2 = Promise.reject("Klaida 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value bus "Sėkmė!"
      })
      .catch((error) => {
        // Apdorojimas `AggregateError`, jei visi pažadai atmesti
      });