Le Promises in Node.js sono oggetti che rappresentano il risultato finale di un’operazione asincrona. Una Promise può essere in uno di questi tre stati:
1. Pending (in attesa): Il risultato finale non è ancora disponibile.
2. Fulfilled (completato): L’operazione è terminata con successo e la Promise ha un risultato definitivo.
3. Rejected (rifiutato): L’operazione è fallita.
Per utilizzare le Promises in Node.js, segui questi passi:
1. Creare una Promise:
Una Promise viene creata utilizzando il costruttore Promise. Si passano due funzioni come parametri al costruttore, `resolve` e `reject`, che vengono chiamate rispettivamente se l’operazione ha successo o fallisce.
```
let promessa = new Promise(function(resolve, reject){
//operazione asincrona..
if(/*operazione ha successo*/){
resolve(value);
}
else{
reject(error);
}
});
```
1. Utilizzare una Promise:
Dopo aver creato una Promise, si utilizzano i metodi `.then()` e `.catch()` per gestire rispettivamente i casi di successo o fallimento dell’operazione asincrona.
```
promessa
.then(function(result) {
//gestire il successo
console.log(result);
})
.catch(function(error) {
//gestire il fallimento
console.error(‘C\‘è stato un errore: ‘, error);
});
```
1. Chainability:
È possibile concatenare più metodi `.then()` per eseguire più operazioni asincrone in sequenza. Ogni metodo `.then()` restituisce una nuova Promise, il che consente la concatenazione.
```
promessa
.then(function(result) {
//operazione asincrona
return anotherPromise;
})
.then(function(anotherResult) {
//un’altra operazione asincrona
})
.catch(function(error) {
//gestire il fallimento
});
```
In questo modo si può gestire codice asincrono in modo più pulito e leggibile, evitando le cosiddette “callback hell”. Inoltre, ogni blocco `.catch()` può gestire sia i propri errori che quelli provenienti dai blocchi `.then()` precedenti.
È importante notare che le Promises non rendono il codice sincrono, ma piuttosto forniscono un modo per organizzare meglio il codice asincrono.