Promises in Node.js zijn een design pattern dat helpt bij het behandelen van asynchrone operaties. Ze zijn in feite een moderne vervanging van callbacks.
Een belofte kan drie toestanden hebben:
- pending: het beloofde resultaat is nog niet beschikbaar;
- fulfilled: de bewerking is voltooid, het resultaat is bekend;
- rejected: de bewerking is mislukt, er is een fout opgetreden.
Beloften in Node.js worden gemaakt met de Promise constructor:
```
let p = new Promise((resolve, reject) => {
// Do an async task and then…
```
p.then((message) => {
console.log(message)
}).catch((err) => {
console.log(err)
});
```
Het belangrijkste voordeel van beloften is de mogelijkheid om ze te ketenen. Met andere woorden, je kunt .then meerdere keren oproepen om verschillende asynchrone bewerkingen uit te voeren, één na de andere:
```
doSomethingAsync()
.then(result => doSomethingElseAsync())
.then(newResult => doThirdThingAsync())
.then(finalResult => {
console.log(‘Got the final result: ‘ + finalResult);
})
.catch(failureCallback);
```
In dit geval wordt doSomethingElseAsync() pas opgeroepen nadat de eerste asynchrone bewerking is uitgevoerd, en zo verder. Als er op enig moment een fout optreedt, wordt de failureCallback-functie onmiddellijk uitgevoerd, waarbij de resterende stappen worden genegeerd.