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štruktoranew 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
fulfilleds 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
rejecteds 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 odPromise.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
fulfilledaleborejecteds 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
fulfilleds 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 chybuAggregateError, 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ú });