Sobes.tech
Junior

Koje vrste Promise poznaješ?

sobes.tech АИ

Одговор од АИ

Glavne vrste obećanja u Node.js:

  • Basic Promise: Kontejner za buduće vrijednosti ili pogreške. Ima tri stanja: pending (na čekanju), fulfilled (uspješno završeno), rejected (odbijeno pogreškom). Kreira se pomoću konstruktora new Promise().

    // Kreiranje osnovnog obećanja
    const myPromise = new Promise((resolve, reject) => {
      // Asinkrona operacija
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("Operacija uspješno završena");
        } else {
          reject("Došlo je do pogreške");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Kreira obećanje koje odmah prelazi u stanje fulfilled s danom vrijednošću.

    // Kreiranje riješenog obećanja
    const resolvedPromise = Promise.resolve("Ovo je već ispunjeno obećanje");
    
  • Promise.reject(): Kreira obećanje koje odmah prelazi u stanje rejected s razlogom pogreške.

    // Kreiranje odbačenog obećanja
    const rejectedPromise = Promise.reject(new Error("Ovo je odbačeno obećanje"));
    
  • Promise.all(): Prima niz obećanja i vraća novo obećanje. Ovo novo obećanje prelazi u stanje fulfilled kada sva obećanja u nizu uspješno završe. Vrijednost će biti niz rezultata u istom redoslijedu kao ulazna obećanja. Ako bilo koje obećanje bude odbačeno, Promise.all() se odmah odobrava s razlogom prvog odbačenog obećanja.

    // Korištenje 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 će biti [1, 2, 3]
      })
      .catch((error) => {
        // Obrada pogrešaka
      });
    
  • Promise.allSettled(): Prima niz obećanja i vraća novo obećanje. Ovo novo obećanje prelazi u stanje fulfilled kada sva obećanja budu uspješno završena ili odbačena. Vrijednost će biti niz objekata koji opisuju rezultat svakog obećanja (stanje i vrijednost/razlog). Za razliku od Promise.all(), ne odobrava se odmah.

    // Korištenje Promise.allSettled()
    const promiseA = Promise.resolve("uspjeh");
    const promiseB = Promise.reject("pogreška");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results će biti niz objekata:
        // [{status: 'fulfilled', value: 'uspjeh'}, {status: 'rejected', reason: 'pogreška'}]
      });
    
  • Promise.race(): Prima niz obećanja i vraća novo obećanje. Ovo novo obećanje prelazi u stanje fulfilled ili rejected s rezultatom/razlogom prvog obećanja koje je uspješno završilo ili odbačeno.

    // Korištenje Promise.race()
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Ja sam brz!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Ja sam spor..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value će biti "Ja sam brz!"
      });
    
  • Promise.any(): Prima niz obećanja i vraća novo obećanje. Ovo novo obećanje prelazi u stanje fulfilled s vrijednošću prvog obećanja koje je uspješno završilo. Ako sva obećanja budu odbačena, Promise.any() vraća pogrešku AggregateError koja sadrži razloge svih odbačenih obećanja. Dostupno od Node.js 12.

    // Korištenje Promise.any()
    const promiseFail1 = Promise.reject("Pogreška 1");
    const promiseSuccess = Promise.resolve("Uspjeh!");
    const promiseFail2 = Promise.reject("Pogreška 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value će biti "Uspjeh!"
      })
      .catch((error) => {
        // Obrada AggregateError ako su sva obećanja odbačena
      });