Een belofte (Promise) in JavaScript is een object dat vertegenwoordigt of een bepaalde operatie nu al of niet succesvol is voltooid en welke waarde deze operatie heeft teruggegeven. Het is in wezen een manier om asynchrone programmering te hanteren, waardoor je dingen als laden van netwerkbronnen, wachten op gebruikersinput of het instellen van timers en andere asynchrone taken kunt doen zonder de uitvoering van je code volledig te blokkeren.
Hieronder volgen de stappen om een belofte in JavaScript te maken en te gebruiken:
1. Creëer de belofte:
```
let promise = new Promise(function(resolve, reject) {
// Doe een asynchrone taak en roep vervolgens:
// resolve(resultaat) als de taak succesvol was
// reject(fout) als er een fout optrad
});
```
De resolve en reject functies worden automatisch door JavaScript geleverd als argumenten aan de functie die je aan de Promise constructor geeft.
1. Gebruik de belofte:
Nadat je de belofte hebt gemaakt, kun je de then() en catch() methodes erop aanroepen om te bepalen wat er moet gebeuren als de belofte wordt ingelost of wordt afgewezen.
```
promise.then(function(result) {
// doe iets met het resultaat
}).catch(function(fout) {
// doe iets met de fout
});
```
1. Kettingbeloften:
Je kunt de then() methode ook koppelen aan een andere belofte, waardoor een keten van beloften ontstaat.
```
promise1.then(function(result1) {
return promise2(result1);
}).then(function(result2) {
return promise3(result2);
}).then(function(result3) {
// doe iets met result3
}).catch(function(fout) {
// dit zal elke fout vangen die zich ergens in de keten voordoet
});
```
Deze ketting van beloften betekent dat je een reeks asynchrone bewerkingen kunt uitvoeren waarbij elke stap afhankelijk is van de vorige, terwijl je toch een schone en duidelijke code behoudt.
Let op: Promise is een relatief recente toevoeging aan JavaScript en wordt mogelijk niet in alle browsers ondersteund. Je zou kunnen overwegen om een polyfill te gebruiken of een bibliotheek zoals Bluebird als je beloften moet gebruiken in oudere browsers.