Complete handleiding voor de `setTimeout`-methode in JavaScript

  • Functionaliteit en syntaxis van de timer voor het uitvoeren van uitgestelde code.
  • Operationele verschillen tussen de browseromgeving en Node.js.
  • Methoden voor het annuleren van uitvoeringen en het beheren van aangepaste parameters.
  • Technische vergelijking tussen het gebruik van setInterval en geneste timers.

Detailweergave van JavaScript-code op een scherm, die de technische basis van de setTimeout-methode illustreert.

Je hebt waarschijnlijk wel eens een website nodig gehad die iets moest doen, maar niet direct, maar pas na een paar seconden. Om dit te bereiken, biedt JavaScript een fundamentele tool genaamd `setTimeout` , die in feite werkt als een timer die, wanneer de teller op nul staat, een specifieke actie activeert. Het is een van die functies die op het eerste gezicht simpel lijkt, maar er zijn eigenaardigheden en technische details die het waard zijn om te kennen om programmeerfouten te voorkomen.

Hoewel we deze methode constant in de browser tegenkomen, is het belangrijk om te benadrukken dat deze geen onderdeel is van de JavaScript-taal zelf, maar wordt aangeboden door de runtime-omgeving . Dit betekent dat we hem weliswaar in Chrome of Firefox gebruiken, maar ook in Node.js, zij het met enkele verschillen in wat het systeem retourneert. Laten we eens gedetailleerd bekijken hoe het werkt, van de basisprincipes tot geavanceerde trucs om je applicaties soepel te laten draaien.

Dev Home, Visual Studio Code en Git
Gerelateerd artikel:
Complete handleiding voor de pijl- en puntfuncties in JavaScript

Wat is setTimeout precies en hoe wordt het gebruikt?

Een afbeelding van een laptop met programmeercode en een kop koffie, die de softwareontwikkelomgeving illustreert.

Simpel gezegd, met deze globale methode kunt u de uitvoering van een stuk code of een functie plannen nadat een bepaalde tijd is verstreken . Zodra de timer afloopt en de functie is uitgevoerd, eindigt het proces; het wordt dus niet automatisch herhaald. De basissyntaxis vereist dat u aangeeft wat u wilt doen en hoe lang u wilt wachten, altijd uitgedrukt in milliseconden (onthoud dat 1000 ms gelijk is aan één seconde).

Om het op te starten, kunnen we een functie als eerste argument meegeven. Om historische redenen is het echter ook mogelijk om een ​​tekenreeks met code mee te geven, hoewel dit tegenwoordig als slechte praktijk wordt beschouwd. Het is veel beter om pijlfuncties of verwijzingen naar benoemde functies te gebruiken om de code overzichtelijk en veilig te houden.

Parameters en flexibiliteit bij de uitvoering

Afbeelding van een digitale stopwatch op een smartphonescherm, een ideale visuele metafoor voor het setTimeout-timerconcept.

Bij het configureren van de timer is de tweede parameter de vertraging . Als we niets specificeren, is de standaardwaarde 0. Maar hier komt het interessante gedeelte: wat als onze functie externe gegevens nodig heeft? Er zijn twee belangrijke manieren om dit af te handelen. De eerste is via een anonieme functie die de oorspronkelijke aanroep omhult, waardoor we alle gewenste argumenten kunnen doorgeven. De tweede, en elegantere, manier is om gebruik te maken van het feit dat `setTimeout` ons in staat stelt extra argumenten toe te voegen vanaf de derde parameter, die direct worden toegewezen aan de callbackfunctie.

Dev Home, Visual Studio Code en Git
Gerelateerd artikel:
Handleiding voor het afhandelen van asynchrone fouten met try/catch in promises.

Annuleringsbeheer met clearTimeout

Digitale displays die het verstrijken van de tijd weergeven, waarmee uitgestelde uitvoering en tijdmanagement in programmering worden gesymboliseerd.

Soms neemt het leven onverwachte wendingen en moeten we een geplande taak annuleren die nog niet is uitgevoerd. Om dit te doen, moeten we weten dat `setTimeout` een unieke identificatiecode (een `timerId`) retourneert. In browsers is deze ID meestal een getal, terwijl het in Node.js een complexer object is. Als we deze waarde in een variabele opslaan, kunnen we de functie ` clearTimeout(timerId)` aanroepen om de bewerking te annuleren en te voorkomen dat de code wordt uitgevoerd, waardoor systeembronnen worden bespaard.

Vergelijking: setTimeout versus setInterval

Close-up van kleurrijke programmeercode op een scherm, wat de inhoud een technologische en moderne visuele stijl geeft.

Het is heel gebruikelijk om deze twee methoden door elkaar te halen. Terwijl `setTimeout` de functie slechts één keer uitvoert, voert `setInterval` deze herhaaldelijk uit telkens wanneer het gedefinieerde interval verstrijkt. Er is echter een geavanceerde truc: geneste `setTimeout` . Dit houdt in dat er een nieuwe `setTimeout` wordt aangeroepen direct aan het einde van de uitvoering van de huidige functie.

Deze techniek is veel flexibeler dan `setInterval` omdat het een echte en constante vertraging garandeert tussen het einde van de ene taak en het begin van de volgende. Bij `setInterval` kunnen aanroepen zich ophopen of continu worden uitgevoerd als de functie langer duurt dan de ingestelde intervaltijd. Geneste functies daarentegen stellen je in staat de tijd dynamisch aan te passen, wat essentieel is als je bijvoorbeeld verzoeken naar een server stuurt die mogelijk overbelast is en je de wachttijd moet verlengen.

Het merkwaardige geval van nul vertraging en beperkingen

Als je `setTimeout(func, 0)` gebruikt , denk je misschien dat de functie direct wordt uitgevoerd, maar dat is niet het geval. Wat er gebeurt, is dat de scheduler de taak in de wachtrij plaatst om zo snel mogelijk te worden uitgevoerd , maar altijd nadat het huidige script volledig is afgerond. Het is een manier om te zeggen: "Maak eerst af waar je mee bezig bent, en voer dit dan zo snel mogelijk uit."

Het is bovendien belangrijk om te weten dat browsers een minimale vertraging van 4 ms opleggen voor geneste timers nadat deze vijf keer achter elkaar zijn uitgevoerd. Dit is een overblijfsel uit oudere versies om te voorkomen dat de browser vastloopt. De precisie is echter niet exact; als de CPU overbelast is of het tabblad op de achtergrond draait , kan de browser de uitvoering tot wel 300 ms of zelfs een hele seconde vertragen om de batterij te sparen.

Implementatie in moderne frameworks

Deze methode is perfect te gebruiken met tools zoals React of Angular. In React is de ideale aanpak om `setTimeout` in een `useEffect`- hook te plaatsen om de levenscyclus van het component te beheren en ervoor te zorgen dat de timer wordt gereset met de return-functie, waardoor geheugenlekken worden voorkomen. In Angular kan het eenvoudig worden geïntegreerd in de constructor of lifecycle-hooks van het component om alerts te activeren of asynchrone data te laden.

Voor wie een hogere mate van complexiteit nastreeft, kunnen timers worden gecombineerd met Promises en async/await . Dit maakt het mogelijk om veel leesbaardere en professionelere wachtsequenties te creëren, waardoor de beruchte "callback hell" wordt vermeden en meerdere timers asynchroon en ordelijk kunnen worden beheerd.

De mogelijkheid om tijd te beheren in JavaScript is essentieel voor het creëren van dynamische interfaces, van digitale klokken en animaties tot systemen voor het opnieuw proberen van verbindingen. Door `setTimeout` te beheersen, deze te overschrijven met `clearTimeout` en te begrijpen hoe deze interactie heeft met de event loop, kunt u de applicatieprestaties optimaliseren en de gebruikerservaring verbeteren. Houd er daarbij altijd rekening mee dat de nauwkeurigheid van de tijd sterk afhankelijk is van de omgeving en de systeembelasting.


Voeg dit toe als voorkeursbron in Google.