⊗jsSpPrmFC 171 of 294 menu

Het creëren van vervulde promises in JavaScript

Soms kan het nodig zijn om een reeds voltooide promise te creëren. Hiervoor bestaan twee methoden: de methode Promise.resolve creëert een succesvol vervulde promise, Promise.reject creëert een afgewezen promise. Als parameter ontvangen deze methoden dat wat het resultaat of de fout van de promise respectievelijk wordt.

Wanneer kunnen we een reeds vervulde promise nodig hebben? Laten we kijken naar een voorbeeld. Stel we hebben een functie die een getal als parameter accepteert, er asynchroon iets mee doet en een promise met het resultaat teruggeeft:

function func(num) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); }

We zullen onze functie als volgt gebruiken:

func(5).then(function(res) { console.log(res); // geeft 25 weer });

Stel nu dat we besloten hebben dat we onze asynchrone operatie alleen zullen uitvoeren als er een getal groter dan nul is doorgegeven. Anders moet het resultaat van de functie nul zijn:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return 0; // nul resultaat } }

Nu krijgt het echter dat de functie ofwel een promise, ofwel een getal teruggeeft. Hierdoor kunnen we niet langer de methode then op het resultaat van de functie toepassen, omdat in het geval dat de functie een getal teruggeeft we een fout krijgen:

func(0).then(function(res) { // fout, we passen de then methode toe op nul });

Promise.resolve kan ons helpen het probleem op te lossen:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // we geven een promise terug, niet een getal } }

Stel nu dat we besloten hebben dat voor een doorgegeven nul we nul moeten teruggeven, en voor getallen kleiner dan nul - een uitzondering. Promise.reject kan ons hierbij helpen:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else if (num === 0) { return Promise.resolve(0); } else { return Promise.reject('incorrect number'); // we geven een afgewezen promise terug } }
Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren