⊗jsSpPrmInr 162 of 294 menu

Inleiding tot promises in JavaScript

Je weet al dat het gebruik van het callback-model van asynchroon programmeren gemakkelijk leidt tot een situatie van callback hell. Daarom werd in JavaScript een nieuw model geïntroduceerd genaamd promises (promise). Laten we dit model bestuderen.

Een promise is een object waar een functie als parameter aan wordt doorgegeven, waarbinnen we onze asynchrone code moeten plaatsen:

let promise = new Promise(function() { // asynchrone code });

Zoals je ziet, heb ik het object met de promise opgeslagen in de variabele promise. Op een andere plek in de code kan ik op deze variabele de methode then toepassen, waarbij ik een functie doorgeef met de code die moet worden uitgevoerd wanneer de asynchrone code, geschreven bij het aanmaken van deze promise, is voltooid:

promise.then(function() { // wordt uitgevoerd wanneer de asynchrone code is voltooid });

Het klinkt verwarrend, dus laten we naar een voorbeeld kijken. Stel, ik heb de volgende asynchrone code:

setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000);

Stel dat ik voor dit voorbeeld onze hoofdtaak van asynchroon programmeren wil oplossen: een bepaald code uitvoeren nadat de timer is afgelopen. Hierbij wil ik deze code niet *in* de timer zelf plaatsen en wil ik dat het resultaat, dat ik in de variabele result heb geschreven, op de een of andere manier in deze code terechtkomt. We hebben deze taak in eerdere lessen opgelost via callbacks en subscriptions. Laten we nu eens kijken hoe we dit kunnen doen met promises.

Om te beginnen moeten we onze asynchrone code in een promise wrappen:

let promise = new Promise(function() { setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Dit is echter niet voldoende. We moeten expliciet aangeven dat onze asynchrone code is voltooid. Hierbij helpt een speciale voltooiingsfunctie, die automatisch in de eerste parameter van de functie terechtkomt, als deze is gespecificeerd:

let promise = new Promise(function(resolve) { // we specificeren de parameter setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Met de voltooiingsfunctie kunnen we expliciet aangeven aan de promise dat de asynchrone code is voltooid. Hiervoor moeten we deze functie aanroepen op de gewenste plek:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(); // voltooi de promise }, 3000); });

Als we een resultaat van de asynchrone code naar buiten willen sturen, kunnen we dit doorgeven als een parameter aan onze voltooiingsfunctie:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(result); // geef het resultaat door }, 3000); });

We kunnen uiteraard de tussenliggende variabele weglaten:

let promise = new Promise(function(resolve) { setTimeout(function() { resolve([1, 2, 3, 4, 5]); }, 3000); });

Nu kunnen we op elke andere plek de methode then van onze promise aanroepen:

promise.then(function() { // wordt geactiveerd wanneer de promise is voltooid });

Het resultaat van de promise komt in de eerste parameter van de functie terecht, als we deze willen specificeren:

promise.then(function(result) { console.log(result); // geeft de array met het resultaat weer });

Maak een promise, waarbinnen een vertraging van 5 seconden zit, waarna de promise moet worden voltooid, waarbij het een willekeurige tekst als resultaat teruggeeft. Geef deze tekst weer op het scherm.

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