Promise in Javascript
Concetto di Promise
Le promesse sono un costrutto fondamentale nella gestione asincrona in JavaScript. Una promessa rappresenta un’operazione asincrona che può essere in uno dei tre stati: “in sospeso” (pending), “risolta” (fulfilled) o “respinta” (rejected). Le promesse semplificano la gestione del flusso di lavoro asincrono, migliorando la leggibilità del codice e consentendo di evitare il cosiddetto “callback hell”.
Creazione di una Promessa
Per creare una promessa, puoi utilizzare il costruttore Promise
. Una promessa richiede una funzione di callback con due parametri: resolve
e reject
, che vengono chiamati quando l’operazione asincrona è completata o fallisce.
Ecco un esempio di creazione di una promessa:
const promessa = new Promise((resolve, reject) => {
// Simuliamo un'operazione asincrona
setTimeout(() => {
const risultato = Math.random();
if (risultato > 0.5) {
resolve(risultato); // Operazione riuscita
} else {
reject("Errore: l'operazione è fallita"); // Operazione fallita
}
}, 1000);
});
promessa
.then((risultato) => {
console.log(`Operazione riuscita con risultato: ${risultato}`);
})
.catch((errore) => {
console.error(errore);
});
In questo esempio, la promessa rappresenta un’operazione asincrona simulata con un ritardo di 1 secondo. Se il risultato generato è maggiore di 0.5, la promessa viene risolta con il risultato; altrimenti, viene respinta con un messaggio di errore.
Gestione dei Risultati
Le promesse consentono di gestire facilmente i risultati delle operazioni asincrone utilizzando i metodi .then()
e .catch()
. Il metodo .then()
viene chiamato quando la promessa viene risolta, mentre il metodo .catch()
viene chiamato quando la promessa viene respinta.
Catena di Promesse
Le promesse possono essere collegate in una catena (chaining), consentendo di eseguire operazioni asincrone in sequenza. Puoi utilizzare il metodo .then()
per passare il risultato da una promessa all’altra.
Ecco un esempio di catena di promesse:
const primaPromessa = new Promise((resolve) => {
setTimeout(() => {
resolve(5);
}, 1000);
});
const secondaPromessa = primaPromessa.then((risultato) => {
return risultato * 2;
});
secondaPromessa.then((risultato) => {
console.log(`Risultato finale: ${risultato}`);
});
In questo esempio, la prima promessa viene risolta dopo 1 secondo con il valore 5. Successivamente, il risultato viene moltiplicato per 2 nella seconda promessa, e infine il risultato finale viene stampato.
Conclusioni
Le promesse sono uno strumento potente per gestire il flusso di lavoro asincrono in JavaScript. Consentono di scrivere codice più leggibile, evitando il problema del “callback hell” e semplificando la gestione di operazioni asincrone complesse. Nelle prossime lezioni, esploreremo l’approccio moderno basato su funzioni async/await.