Dagli script precedenti abbiamo imparato a utilizzare tutte le varie sfaccettature delle promise, ma dobbiamo tenere presente che per la programmazione asincrona abbiamo a disposizione anche le keyword async/await. Quando è giusto usare l'una o l'altra versione?
Una risposta giusta non esiste, dipende dalle situazioni: nel caso in cui, come nell'esempio seguente, volessimo attendere il risultato di più promise, potremmo usare la keyword await per attendere la risposta.
const urls = [ "https://mio-sito.it/users", "https://mio-sito.it/users/1", ]; //array di dati const data = []; for (url of urls) { await fetch(url) // conversione .then((response) => response.json()) // inserimento nell'array .then((jsonResponse) => data.push(jsonResponse)); }
Il codice presenta però un errore logico: ogni chiamata verrà attesa prima di eseguire la successiva. Per ottenere un'effettiva esecuzione asincrona e parallela delle operazioni avremo bisogno di modificarlo, utilizzando il metodo Promise.all, e attendendone la risposta con await.
Rifattoriziamo il codice creando in primo luogo una lista delle operazioni asincrone e utilizzando la funzione per attenderne la risoluzione.
const urls = [ "https://mio-sito.it/users", "https://mio-sito.it/users/1", ]; const promises = urls.map((url) => fetch(url).then((response) => response.json()) ); const data = await Promise.all(promises);
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Le novità di Entity Framework (Core) 7
Sfruttare la local cache del browser tramite gli ETag in ASP.NET Core
Abilitare HTTP/3 in ASP.NET Core 7.0
Abilitare automaticamente Dependabot in tutti i repository di una organizzazione su GitHub
Sviluppare applicazioni serverless con Azure Container Apps
Raggruppare i parametri di una minimal API in un singolo oggetto in ASP.NET Core
Migrare un repository git da Azure DevOps a GitHub
Gestire tipi complessi in query string grazie a IParsable in ASP.NET Core 7.0
Organizzare i moduli sfruttando CommonJS
Recuperare la data di creazione e ultima modifica di un record con Entity Framework Core e le temporal table di SQL Server
Gestire gli errori di caricamento delle immagini
Filtrare e rimuovere gli elementi dalla cache del browser tramite le API JavaScript