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
Utilizzare il trigger SQL con le Azure Function
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Gestione degli eventi nei Web component HTML
Generare un hash con SHA-3 in .NET
Rendere le variabili read-only in una pipeline di Azure DevOps
Configurare e gestire sidecar container in Azure App Service
Estrarre dati randomici da una lista di oggetti in C#
Cambiare la chiave di partizionamento di Azure Cosmos DB
Gestire la cancellazione di una richiesta in streaming da Blazor
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
I più letti di oggi
- Creare agenti facilmente con Azure AI Agent Service
- Loggare le query più lente con Entity Framework
- Rendere i propri workflow e le GitHub Action utilizzate più sicure
- Disabilitare le run concorrenti di una pipeline di Azure DevOps
- Gestione degli eventi nei Web component HTML
- Fornire parametri ad un Web component HTML
- Introduzione ai web component HTML