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í konstruktorunew 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
fulfilleds 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
rejecteds 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 odPromise.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
fulfilledneborejecteds 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
fulfilleds hodnotou první promise, která úspěšně dokončila. Pokud všechna promise selžou,Promise.any()vrátí chybuAggregateError, 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 });