Nello script precedente abbiamo iniziato un'analisi della programmazione asincrona in JavaScript utilizzando le Promise. Ora vedremo alcuni metodi utili per gestire più promise nello stesso momento.
Promise.all
Unisce tutte le Promise in una sola contenente un array di risultati delle singole.
const p1 = Promise.resolve("Ciao"); const p2 = new Promise((resolve, reject) => { setTimeout(resolve, 200, 'Mondo'); }); Promise.all([p1, p2]).then((values) => { console.log(values); // ["Ciao", "Mondo"] });
Promise.race
Fornendo un'array di Promise, restituisce una Promise che si risolverà solo con il valore della più veloce.
const p1 = new Promise((resolve, reject) => { setTimeout(resolve, 200, 'Ciao'); }); const p2 = new Promise((resolve, reject) => { setTimeout(resolve, 2000, 'Mondo'); }); Promise.race([p1, p2]).then((value) => { console.log(value); // "Ciao" });
Promise.any
A seguito della fornitura di un array di Promise, restituisce la prima riuscita. Nel caso tutte falliscano anche la promise risultante fallirà.
const p0 = Promise.reject(0); const p1 = new Promise((resolve, reject) => { setTimeout(resolve, 200, 'Ciao'); }); const p2 = new Promise((resolve, reject) => { setTimeout(resolve, 2000, 'Mondo'); }); Promise.race([p0, p1, p2]).then((value) => { console.log(value); // "Ciao" });
Promise.allSettled
Questo metodo è molto simile al metodo all, ma permette l'esecuzione di tutte le Promise, indipendentemente dal fallimento di una o più.
const p0 = Promise.reject("Fallimento"); const p1 = Promise.resolve("Ciao"); const p2 = new Promise((resolve, reject) => { setTimeout(resolve, 200, 'Mondo'); }); Promise.allSettles([p0, p1, p2]).then((values) => { values.forEach((value) => console.log(value) // Object { status: "rejected", reason: "Fallimento" } // Object { status: "fulfilled", value: "Ciao" } // Object { status: "fulfilled", value: "Mondo" } });
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Reactive form tipizzati con modellazione del FormBuilder in Angular
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Eseguire query verso tipi non mappati in Entity Framework Core
Usare un KeyedService di default in ASP.NET Core 8
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Creare form tipizzati con Angular
Utilizzare Tailwind CSS all'interno di React: primi componenti
Applicare il versioning ai nostri endpoint ASP.NET Core Minimal API
Recuperare un elemento inserito nella cache del browser tramite API JavaScript
Evitare il flickering dei componenti nel prerender di Blazor 8
Potenziare Azure AI Search con la ricerca vettoriale