Ik probeer node.js wat beter te bergrijpen, met name dat code synchronous loopt en niet, zoals ik bijvoorbeeld van PHP gewend ben, regel-per-regel. Nu heb ik door het inlezen van promises, async en await het volgende voorbeeld in elkaar gezet voor mijn eigen begrip. Het doel is simpel: tussen elk van de console.log's een vertraging creeren. Dit gebeurt alleen als ik de functie delayThree gebruik.
De console output is
Ik ben gewend functies te declareren als in delayOne. Dat het ook op de manier van delayTwo en delayThree kan, snap ik inmiddels.
Wat ik echter niet snap, is dat de inhoud van alle drie de functies gelijk is, maar de delay alleen optreed bij delayThree. Het enige verschil dat ik tussen delayTwo en delayThree kan zien, is dat delayThree één regel is en niet omgeven is door { en }. Ik wil graag begrijpen waarom dát het verschil lijkt te maken. Ik heb gezocht naar de verschillen tussen het declareren van functies, maar kom er niet uit.
Wie heeft een verhelderende blik? Ik vind zelf delayThree het moeilijkste om te lezen (en het lelijkste), zeker als deze functie uiteindelijk vervangen gaat worden door iets met veel inhoud. Moet ik dit gewoon slikken of is er toch een andere manier?
Alvast bedankt!
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| // Delay functions function delayOne(ms){ new Promise(function(resolve){ setTimeout(resolve, ms) }) } const delayTwo = (ms) => { new Promise(function(resolve){ setTimeout(resolve, ms) }) } const delayThree = (ms) => new Promise(function(resolve){ setTimeout(resolve, ms) }) // Main async function main(){ console.log("start") await delayOne(2000) console.log("After delayOne") await delayTwo(2000) console.log("After delayTwo") await delayThree(2000) console.log("After delay Three") console.log("end") } main() |
De console output is
code:
1
2
3
4
5
6
| start After delayOne After delayTwo >>>> vertraging van 2 seonden <<<< After delay Three end |
Ik ben gewend functies te declareren als in delayOne. Dat het ook op de manier van delayTwo en delayThree kan, snap ik inmiddels.
Wat ik echter niet snap, is dat de inhoud van alle drie de functies gelijk is, maar de delay alleen optreed bij delayThree. Het enige verschil dat ik tussen delayTwo en delayThree kan zien, is dat delayThree één regel is en niet omgeven is door { en }. Ik wil graag begrijpen waarom dát het verschil lijkt te maken. Ik heb gezocht naar de verschillen tussen het declareren van functies, maar kom er niet uit.
Wie heeft een verhelderende blik? Ik vind zelf delayThree het moeilijkste om te lezen (en het lelijkste), zeker als deze functie uiteindelijk vervangen gaat worden door iets met veel inhoud. Moet ik dit gewoon slikken of is er toch een andere manier?
Alvast bedankt!
[ Voor 3% gewijzigd door CB32 op 26-02-2019 11:22 ]