Le Promesse (Promise)
Le Promesse (Promise) in JavaScript
Le Promise sono uno strumento introdotto in JavaScript per gestire il codice asincrono in modo più chiaro ed efficace. Una Promise rappresenta un'operazione che può essere completata con successo (resolved) o fallire (rejected). Permettono di scrivere codice più leggibile e di evitare annidamenti complessi di funzioni (callback hell).
Introduzione alle Promise
Una Promise è un oggetto che rappresenta il risultato futuro di un'operazione asincrona. Ha tre stati principali:
- pending: in attesa, l’operazione non è ancora conclusa
- fulfilled: l’operazione è terminata con successo
- rejected: l’operazione è terminata con errore
Creare una Promise
Una Promise si crea con il costruttore new Promise()
che riceve una funzione con due parametri: resolve
e reject
. Vediamo un esempio semplice.
Codice Esempio: Creazione di una Promise

let promessa = new Promise((resolve, reject) => {
let successo = true;
if (successo) {
resolve("Operazione completata!");
} else {
reject("Si è verificato un errore.");
}
});
// Uso della Promise
promessa.then((messaggio) => {
console.log(messaggio); // "Operazione completata!"
}).catch((errore) => {
console.log(errore); // "Si è verificato un errore."
});
Uso di then() e catch()
then()
viene eseguito quando la Promise è risolta con successo, mentre catch()
viene eseguito in caso di errore. È possibile concatenare più then per gestire una sequenza di operazioni.
Codice Esempio: Chaining con Promise

let promessa = new Promise((resolve) => {
resolve(5);
});
promessa
.then((numero) => {
console.log(numero); // 5
return numero * 2;
})
.then((risultato) => {
console.log(risultato); // 10
})
.catch((errore) => {
console.log("Errore:", errore);
});
Esempio con setTimeout
Un caso comune è l’uso delle Promise per gestire operazioni asincrone simulate con setTimeout
.
Codice Esempio: Promise con setTimeout

function operazioneAsincrona() {
return new Promise((resolve) => {
setTimeout(() => {
resolve("Risultato dopo 2 secondi");
}, 2000);
});
}
operazioneAsincrona().then((messaggio) => {
console.log(messaggio); // "Risultato dopo 2 secondi"
});
Tabella riassuntiva
Metodo | Descrizione | Esempio sintetico |
---|---|---|
then() | Gestisce il risultato in caso di successo | promise.then(val => console.log(val)) |
catch() | Gestisce gli errori | promise.catch(err => console.log(err)) |
finally() | Esegue codice in ogni caso (successo o errore) | promise.finally(() => console.log("finito")) |
Considerazioni
Le Promise hanno reso la gestione del codice asincrono molto più chiara rispetto alle sole callback. Sono la base su cui si fonda anche la sintassi moderna async/await, che vedremo subito dopo.