Kokius Promise tipus žinai?
sobes.tech AI
Atsakymas iš AI
Pagrindiniai „Node.js“ pažadų tipai:
-
Pagrindinis pažadas: Yra konteineris būsimoms reikšmėms arba klaidoms. Jame yra trys būsenos:
pending(laukiama),fulfilled(sėkmingai įvykdyta),rejected(atmetama su klaida). Sukuriama naudojantnew Promise()konstruktorių:// Pagrindinio pažado kūrimas const myPromise = new Promise((resolve, reject) => { // Asinchroninė operacija setTimeout(() => { const success = true; if (success) { resolve("Operacija sėkmingai užbaigta"); } else { reject("Įvyko klaida"); } }, 1000); }); -
Promise.resolve(): Sukuria pažadą, kuris nedelsiant pereina į
fulfilledbūseną su nurodyta verte:// Išsprendusio pažado kūrimas const resolvedPromise = Promise.resolve("Tai jau įvykdytas pažadas"); -
Promise.reject(): Sukuria pažadą, kuris nedelsiant pereina į
rejectedbūseną su nurodyta klaidos priežastimi:// Atmesto pažado kūrimas const rejectedPromise = Promise.reject(new Error("Tai atmestas pažadas")); -
Promise.all(): Priima pažadų masyvą ir grąžina naują pažadą. Šis naujas pažadas pereina į
fulfilledbūseną, kai visi pažadai sėkmingai užbaigiami. Vertė bus rezultatų masyvas, tokia pati tvarka kaip įvesties pažadai. Jei bet kuris pažadas nepavyksta,Promise.all()nedelsiant atmestas pirmojo nepavykusio pažado priežastimi:// Naudojant 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 bus [1, 2, 3] }) .catch((error) => { // Klaidų apdorojimas }); -
Promise.allSettled(): Priima pažadų masyvą ir grąžina naują pažadą. Šis naujas pažadas pereina į
fulfilledarbarejectedbūseną, kai visi pažadai užbaigiami. Vertė bus objektų masyvas, aprašantis kiekvieno pažado rezultatą:// Promise.allSettled() naudojimas const promiseA = Promise.resolve("sėkmė"); const promiseB = Promise.reject("klaida"); Promise.allSettled([promiseA, promiseB]) .then((results) => { // results bus objektų masyvas: // [{status: 'fulfilled', value: 'sėkmė'}, {status: 'rejected', reason: 'klaida'}] }); -
Promise.race(): Priima pažadų masyvą ir grąžina naują pažadą. Šis naujas pažadas pereina į
fulfilledarbarejectedbūseną, kai pirmas pažadas iš masyvo, kuris arba sėkmingai užbaigiasi, arba atmestas:// Promise.race() naudojimas const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Aš greitas!"), 50)); const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Aš lėtai..."), 500)); Promise.race([promiseFast, promiseSlow]) .then((value) => { // value bus "Aš greitas!" }); -
Promise.any(): Priima pažadų masyvą ir grąžina naują pažadą. Šis naujas pažadas pereina į
fulfilledbūseną su pirmojo sėkmingai užbaigto pažado verte. Jei visi pažadai atmesti,Promise.any()grąžina klaidąAggregateError, kuri apima visų atmestų pažadų priežastis. Prieinama nuo Node.js 12:// Promise.any() naudojimas const promiseFail1 = Promise.reject("Klaida 1"); const promiseSuccess = Promise.resolve("Sėkmė!"); const promiseFail2 = Promise.reject("Klaida 2"); Promise.any([promiseFail1, promiseSuccess, promiseFail2]) .then((value) => { // value bus "Sėkmė!" }) .catch((error) => { // Apdorojimas `AggregateError`, jei visi pažadai atmesti });