- Autore

- Nome
- Nelson Silva
- Social
Introduzione
L'introduzione di async e await in JavaScript ES7 ha segnato un progresso significativo nel modo di scrivere e gestire il codice asincrono. Questo articolo esplora in dettaglio come utilizzare async e await per gestire diverse situazioni asincrone, con un'enfasi sui pattern avanzati e sulle best practice.
- Concetti Fondamentali di Async/Await
- Pattern Avanzati di Utilizzo
- Gestione degli Errori con Async/Await
- Best Practice e Consigli
- Demistificare Async/Await
Concetti Fondamentali di Async/Await
Async
Una funzione dichiarata come async restituisce implicitamente una Promise, e il valore restituito dalla funzione viene utilizzato per risolvere tale Promise.
async function operazioneAsincrona() {
return 'Risultato';
}
// Restituisce una Promise che si risolve con 'Risultato'
Await
Await viene utilizzato all'interno di funzioni async per mettere in pausa l'esecuzione della funzione fino a quando la Promise non viene risolta o rifiutata.
async function ottenereIdati(url) {
let risposta = await fetch(url);
let dati = await risposta.json();
return dati;
// L'esecuzione si mette in pausa fino alla risoluzione della Promise di fetch
}
Pattern Avanzati di Utilizzo
Esecuzione Parallela
Per eseguire operazioni asincrone in parallelo, puoi usare Promise.all con await.
async function caricareIdatiParalleli(urls) {
let promises = urls.map((url) => fetch(url).then((res) => res.json()));
return await Promise.all(promises);
}
Await in un Ciclo
Sebbene in genere si raccomandi di evitare await all'interno dei cicli, in certi casi — ad esempio quando le operazioni devono essere sequenziali — può essere necessario.
async function elaborazioneSequenziale(urls) {
for (let url of urls) {
let dati = await fetch(url).then((res) => res.json());
console.log(dati);
}
}
Gestione degli Errori con Async/Await
La gestione degli errori nelle funzioni async viene effettuata tramite blocchi try-catch.
Catturare gli Errori
async function caricareIdati(url) {
try {
let risposta = await fetch(url);
return await risposta.json();
} catch (errore) {
console.error('Errore nel caricamento dei dati:', errore);
}
}
Best Practice e Consigli
- Usa Async/Await nei Contesti Appropriati: Evita di usare
asynceawaitper operazioni semplici che non traggono vantaggio dall'asincronia. - Evita l'Await Inutile: Non usare
awaitcon operazioni già sincrone, poiché ciò può introdurre ritardi non necessari. - Combina con le Promises quando Necessario: In situazioni complesse, la combinazione di
async/awaitcon la tradizionale API delle Promises può offrire maggiore flessibilità. - Usa Async/Await per Semplificare il Codice Asincrono: Invece di concatenare più Promises con
.then(), considera di ristrutturare il codice usandoasync/awaitper una maggiore chiarezza.
Demistificare Async/Await
Errori Comuni
- Dimenticare
await: Dimenticare di aggiungereawaitpuò portare a comportamenti inaspettati, poiché il codice successivo potrebbe essere eseguito prima del completamento dell'operazione asincrona. - Blocco Involontario: L'uso improprio di
awaitpuò bloccare l'esecuzione di altre importanti operazioni asincrone.
Utilizzo nelle Funzioni Anonime
Async/await può essere utilizzato anche nelle funzioni anonime:
document.addEventListener('click', async function () {
let dati = await caricareIdati('https://api.esempio.com');
console.log(dati);
});
Conclusione
Async e await hanno trasformato l'approccio alla programmazione asincrona in JavaScript, rendendo il codice più intuitivo e facile da seguire. Capire come applicare questi concetti in modo efficiente è fondamentale per qualsiasi sviluppatore che lavori con JavaScript, soprattutto nelle moderne applicazioni web che dipendono fortemente dalle operazioni asincrone.