Какви видове Promise познаваш?
sobes.tech AI
Отговор от AI
Основни видове promises в Node.js:
-
Basic Promise: Контейнер за бъдещи стойности или грешки. Има три състояния:
pending(в очакване),fulfilled(успешно завършване),rejected(отхвърлено с грешка). Създава се с конструктораnew Promise().// Създаване на базов promise const myPromise = new Promise((resolve, reject) => { // Асимхронна операция setTimeout(() => { const success = true; if (success) { resolve("Операцията е успешно завършена"); } else { reject("Възникна грешка"); } }, 1000); }); -
Promise.resolve(): Създава promise, който незабавно преминава в състояние
fulfilledс дадена стойност.// Създаване на resolved promise const resolvedPromise = Promise.resolve("Това вече е изпълнено обещание"); -
Promise.reject(): Създава promise, който незабавно преминава в състояние
rejectedс причина за грешка.// Създаване на rejected promise const rejectedPromise = Promise.reject(new Error("Това е отхвърлено обещание")); -
Promise.all(): Приема масив от promises и връща нов promise. Този нов promise преминава в състояние
fulfilled, когато всички promises в масива успешно завършат. Стойността ще бъде масив от резултати в същия ред като входните promises. Ако някой от promises бъде отхвърлен,Promise.all()се отхвърля незабавно с причината на първия отхвърлен promise.// Използване на 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 ще бъде [1, 2, 3] }) .catch((error) => { // Обработка на грешки }); -
Promise.allSettled(): Приема масив от promises и връща нов promise. Този нов promise преминава в състояние
fulfilled, когато всички promises бъдат успешно завършени или отхвърлени. Стойността ще бъде масив от обекти, които описват резултата на всяко promise (състояние и стойност/причина). За разлика отPromise.all(), не се отхвърля незабавно.// Използване на Promise.allSettled() const promiseA = Promise.resolve("успех"); const promiseB = Promise.reject("грешка"); Promise.allSettled([promiseA, promiseB]) .then((results) => { // results ще бъде масив от обекти: // [{status: 'fulfilled', value: 'успех'}, {status: 'rejected', reason: 'грешка'}] }); -
Promise.race(): Приема масив от promises и връща нов promise. Този нов promise преминава в състояние
fulfilledилиrejectedс резултата/причината на първия promise, който успешно завърши или беше отхвърлен.// Използване на Promise.race() const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Аз съм бърз!"), 50)); const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Аз съм бавен..."), 500)); Promise.race([promiseFast, promiseSlow]) .then((value) => { // value ще бъде "Аз съм бърз!" }); -
Promise.any(): Приема масив от promises и връща нов promise. Този нов promise преминава в състояние
fulfilledс стойността на първия promise, който успешно завърши. Ако всички promises бъдат отхвърлени,Promise.any()връща грешкаAggregateError, която съдържа причините за всички отхвърлени promises. Достъпно от Node.js 12.// Използване на Promise.any() const promiseFail1 = Promise.reject("Грешка 1"); const promiseSuccess = Promise.resolve("Успех!"); const promiseFail2 = Promise.reject("Грешка 2"); Promise.any([promiseFail1, promiseSuccess, promiseFail2]) .then((value) => { // value ще бъде "Успех!" }) .catch((error) => { // Обработка на AggregateError, ако всички promises бъдат отхвърлени });