Sobes.tech
Junior

Aké typy Promise poznáš?

sobes.tech AI

Odpoveď od AI

Hlavné typy sľubov v Node.js:

  • Základný sľub: Predstavuje kontajner pre budúce hodnoty alebo chyby. Má tri stavy: pending (čakajúci), fulfilled (úspešne splnený), rejected (zamietnutý s chybou). Vytvára sa pomocou konštruktora new Promise().

    // Vytvorenie základného sľubu
    const myPromise = new Promise((resolve, reject) => {
      // Asynchrónna operácia
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("Operácia úspešne dokončená");
        } else {
          reject("Vyskytla sa chyba");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Vytvára sľub, ktorý okamžite prechádza do stavu fulfilled s danou hodnotou.

    // Vytvorenie resolved sľubu
    const resolvedPromise = Promise.resolve("Toto je už splnený sľub");
    
  • Promise.reject(): Vytvára sľub, ktorý okamžite prechádza do stavu rejected s danou chybovou príčinou.

    // Vytvorenie rejected sľubu
    const rejectedPromise = Promise.reject(new Error("Toto je zamietnutý sľub"));
    
  • Promise.all(): Prijíma pole sľubov a vracia nový sľub. Tento nový sľub prechádza do stavu fulfilled, keď všetky sľuby v poli úspešne dokončia. Hodnotou bude pole výsledkov v rovnakom poradí ako vstupné sľuby. Ak ktorýkoľvek sľub v poli zlyhá, Promise.all() sa okamžite zamietne s príčinou prvého zlyhaného sľubu.

    // Použitie 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 bude [1, 2, 3]
      })
      .catch((error) => {
        // Spracovanie chýb
      });
    
  • Promise.allSettled(): Prijíma pole sľubov a vracia nový sľub. Tento nový sľub prechádza do stavu fulfilled, keď všetky sľuby v poli sú buď úspešne dokončené (fulfilled), alebo zamietnuté (rejected). Hodnotou bude pole objektov, ktoré popisujú výsledok každého sľubu (stav a hodnotu/príčinu). Na rozdiel od Promise.all(), sa okamžite nezamietne.

    // Použitie Promise.allSettled()
    const promiseA = Promise.resolve("úspech");
    const promiseB = Promise.reject("chyba");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results bude pole objektov:
        // [{status: 'fulfilled', value: 'úspech'}, {status: 'rejected', reason: 'chyba'}]
      });
    
  • Promise.race(): Prijíma pole sľubov a vracia nový sľub. Tento nový sľub prechádza do stavu fulfilled alebo rejected s výsledkom/príčinou prvého sľubu z poľa, ktorý buď úspešne skončil, alebo zlyhal.

    // Použitie Promise.race()
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Som rýchly!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Som pomalý..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value bude "Som rýchly!"
      });
    
  • Promise.any(): Prijíma pole sľubov a vracia nový sľub. Tento nový sľub prechádza do stavu fulfilled s hodnotou prvého sľubu z poľa, ktorý úspešne skončil. Ak všetky sľuby v poli zlyhajú, Promise.any() vráti chybu AggregateError, ktorá obsahuje príčiny všetkých zlyhaných sľubov. Dostupné od Node.js 12.

    // Použitie Promise.any()
    const promiseFail1 = Promise.reject("Chyba 1");
    const promiseSuccess = Promise.resolve("Úspech!");
    const promiseFail2 = Promise.reject("Chyba 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value bude "Úspech!"
      })
      .catch((error) => {
        // Spracovanie AggregateError, ak všetky sľuby zlyhajú
      });