Parliamo

project-cherry.dev

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.