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
Ottimizzare le performance usando Span<T> e il metodo Split
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Loggare le query più lente con Entity Framework
Creare una libreria CSS universale: Immagini
Testare l'invio dei messaggi con Event Hubs Data Explorer
Creare una libreria CSS universale: Cards
Gestione file Javascript in Blazor con .NET 9
Supportare la sessione affinity di Azure App Service con Application Gateway
Collegare applicazioni server e client con .NET Aspire
Escludere alcuni file da GitHub Secret Scanning
Referenziare un @layer più alto in CSS
Simulare Azure Cosmos DB in locale con Docker