Intermedio14 min
Promises e Async/Await
Gestire operazioni asincrone in JavaScript con Promises, then/catch e la sintassi async/await.
Promises e Async/Await
JavaScript è single-threaded, ma grazie alle Promises e ad async/await puoi gestire operazioni asincrone (richieste di rete, timer, lettura file) senza bloccare l'interfaccia.
Cos'è una Promise
Una Promise rappresenta un valore che potrebbe essere disponibile ora, in futuro, o mai:
javascript
const promessa = new Promise((resolve, reject) => {
const successo = true;
if (successo) {
resolve("Operazione completata");
} else {
reject("Qualcosa è andato storto");
}
});then / catch / finally
javascript
promessa
.then(risultato => console.log(risultato))
.catch(errore => console.error(errore))
.finally(() => console.log("Terminato"));Async / Await
La sintassi async/await rende il codice asincrono leggibile come se fosse sincrono:
javascript
async function caricaDati() {
try {
const risposta = await fetch("/api/utenti");
const dati = await risposta.json();
console.log(dati);
} catch (errore) {
console.error("Errore:", errore.message);
}
}Esecuzione parallela
javascript
async function caricaTutto() {
const [utenti, prodotti] = await Promise.all([
fetch("/api/utenti").then(r => r.json()),
fetch("/api/prodotti").then(r => r.json()),
]);
console.log(utenti, prodotti);
}Promise.all esegue più Promises in parallelo ed è significativamente più veloce che aspettarle una alla volta. Usa Promise.allSettled se vuoi gestire anche i fallimenti parziali.