Una Promise rappresenta un valore che arriverà in futuro: una risposta di rete, un file, un timer. Ha tre stati: pending, fulfilled, rejected.

async function caricaUtente(id) {
  try {
    const res = await fetch("/api/users/" + id);
    const user = await res.json();
    return user;
  } catch (err) {
    console.error("Richiesta fallita", err);
  }
}

async/await è solo zucchero sintattico sulle Promise: await mette in pausa la funzione finché la Promise non si risolve, senza bloccare il resto della pagina. Il codice si legge dall'alto in basso come se fosse sincrono.

Ricorda: await funziona solo dentro una funzione async, e avvolgere tutto in try/catch è ciò che ti salva quando la rete fa i capricci.