Sobes.tech
Junior

Jaké typy Promise znáš?

sobes.tech AI

Odpověď od AI

Hlavní typy promises v Node.js:

  • Základní promise: Kontejner pro budoucí hodnoty nebo chyby. Má tři stavy: pending (čekání), fulfilled (úspěšně dokončeno), rejected (zamítnuto chybou). Vytvoří se pomocí konstruktoru new Promise().

    // Vytvoření základního promise
    const myPromise = new Promise((resolve, reject) => {
      // Asynchronní operace
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("Operace úspěšně dokončena");
        } else {
          reject("Došlo k chybě");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Vytvoří promise, který okamžitě přejde do stavu fulfilled s danou hodnotou.

    // Vytvoření vyřešeného promise
    const resolvedPromise = Promise.resolve("Toto je již splněné promise");
    
  • Promise.reject(): Vytvoří promise, který okamžitě přejde do stavu rejected s chybovým důvodem.

    // Vytvoření zamítnutého promise
    const rejectedPromise = Promise.reject(new Error("Toto je zamítnuté promise"));
    
  • Promise.all(): Přijímá pole promise a vrací nové promise. Toto nové promise přejde do stavu fulfilled, když všechny promise v poli úspěšně dokončí. Hodnotou bude pole výsledků ve stejném pořadí jako vstupní promise. Pokud jakákoli promise selže, Promise.all() se okamžitě zamítne s důvodem první selhávající promise.

    // Použití 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) => {
        // Zpracování chyb
      });
    
  • Promise.allSettled(): Přijímá pole promise a vrací nové promise. Toto nové promise přejde do stavu fulfilled, když všechny promise buď úspěšně dokončí, nebo budou zamítnuty. Hodnotou bude pole objektů, které popisují výsledek každé promise (stav a hodnota/důvod). Na rozdíl od Promise.all(), se nezamítne okamžitě.

    // Použití Promise.allSettled()
    const promiseA = Promise.resolve("úspěch");
    const promiseB = Promise.reject("chyba");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results bude pole objektů:
        // [{status: 'fulfilled', value: 'úspěch'}, {status: 'rejected', reason: 'chyba'}]
      });
    
  • Promise.race(): Přijímá pole promise a vrací nové promise. Toto nové promise přejde do stavu fulfilled nebo rejected s výsledkem/ důvodem první promise, která buď úspěšně dokončila nebo byla zamítnuta.

    // Použití Promise.race()
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Jsem rychlý!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Jsem pomalý..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value bude "Jsem rychlý!"
      });
    
  • Promise.any(): Přijímá pole promise a vrací nové promise. Toto nové promise přejde do stavu fulfilled s hodnotou první promise, která úspěšně dokončila. Pokud všechna promise selžou, Promise.any() vrátí chybu AggregateError, která obsahuje důvody všech zamítnutých promise. Dostupné od Node.js 12.

    // Použití Promise.any()
    const promiseFail1 = Promise.reject("Chyba 1");
    const promiseSuccess = Promise.resolve("Úspěch!");
    const promiseFail2 = Promise.reject("Chyba 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value bude "Úspěch!"
      })
      .catch((error) => {
        // Zpracování AggregateError, pokud všechny promise selžou
      });