Quali tipi di Promise conosci?
sobes.tech AI
Risposta dell'AI
Principali tipi di promesse in Node.js:
-
Promise di base: Rappresenta un contenitore per valori futuri o errori. Ha tre stati:
pending(in attesa),fulfilled(completato con successo),rejected(rifiutato). Viene creato con il costruttorenew Promise().// Creazione di una promessa di base const myPromise = new Promise((resolve, reject) => { // Operazione asincrona setTimeout(() => { const success = true; if (success) { resolve("Operazione completata con successo"); } else { reject("Si è verificato un errore"); } }, 1000); }); -
Promise.resolve(): Crea una promessa che passa immediatamente allo stato
fulfilledcon un valore dato.// Creazione di una promessa risolta const resolvedPromise = Promise.resolve("Questa è già una promessa risolta"); -
Promise.reject(): Crea una promessa che passa immediatamente allo stato
rejectedcon una causa di errore data.// Creazione di una promessa rifiutata const rejectedPromise = Promise.reject(new Error("Questa è una promessa rifiutata")); -
Promise.all(): Prende un array di promesse e restituisce una nuova promessa. Passa allo stato
fulfilledquando tutte le promesse dell'array sono completate con successo. Il valore sarà un array di risultati nello stesso ordine delle promesse di input. Se qualcuna delle promesse viene rifiutata,Promise.all()viene rifiutata immediatamente con la causa della prima promessa rifiutata.// Uso di 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 sarà [1, 2, 3] }) .catch((error) => { // Gestione degli errori }); -
Promise.allSettled(): Prende un array di promesse e restituisce una nuova promessa. Passa allo stato
fulfilledquando tutte le promesse dell'array sono concluse, con successo (fulfilled) o rifiutate (rejected). Il valore sarà un array di oggetti che descrivono il risultato di ogni promessa (stato e valore/causa). A differenza diPromise.all(), non si rifiuta immediatamente.// Uso di Promise.allSettled() const promiseA = Promise.resolve("successo"); const promiseB = Promise.reject("errore"); Promise.allSettled([promiseA, promiseB]) .then((results) => { // results sarà un array di oggetti: // [{status: 'fulfilled', value: 'successo'}, {status: 'rejected', reason: 'errore'}] }); -
Promise.race(): Prende un array di promesse e restituisce una nuova promessa. La nuova promessa passa allo stato
fulfilledorejectedcon il risultato/causa della prima promessa che si risolve o si rifiuta.// Uso di Promise.race() const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Sono veloce!"), 50)); const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Sono lento..."), 500)); Promise.race([promiseFast, promiseSlow]) .then((value) => { // value sarà "Sono veloce!" }); -
Promise.any(): Prende un array di promesse e restituisce una nuova promessa. La promessa passa allo stato
fulfilledcon il valore della prima promessa che si completa con successo. Se tutte le promesse vengono rifiutate,Promise.any()restituisce un erroreAggregateErrorche contiene le cause di tutte le promesse rifiutate. Disponibile a partire da Node.js 12.// Uso di Promise.any() const promiseFail1 = Promise.reject("Errore 1"); const promiseSuccess = Promise.resolve("Successo!"); const promiseFail2 = Promise.reject("Errore 2"); Promise.any([promiseFail1, promiseSuccess, promiseFail2]) .then((value) => { // value sarà "Successo!" }) .catch((error) => { // Gestione di AggregateError se tutte le promesse vengono rifiutate });