I motsetning til andre programmeringsspråk, har ikke JavaScript en innebygd søvnmetode. Så du kan ikke bare kalle en sleep()-funksjon for å sette et Node.js-program på pause. Det er imidlertid andre måter du kan få et program til å vente på en bestemt tid.

Denne opplæringen diskuterer tre tilnærminger: setTimeout, async/wait og sleep-promise-pakken.

Bruke setTimeout() for å vente på en bestemt tid

De setTimeout() funksjonen planlegger koden for at kjøretiden skal kjøres når en bestemt tid har gått. Den godtar en funksjon og en forsinkelsestid i millisekunder. Her er syntaksen:

setTimeout(funksjon(), timeInMs)

Si for eksempel at du hadde en funksjon som skrives ut på konsollen:

funksjonprintSetning() {
console.log("Bruker setTimeout()")
}

For å kjøre funksjonen ovenfor etter at to sekunder har gått, send funksjonen og forsinkelsestiden på 2000ms til setTimeout() funksjon:

setTimeout (printSentence, 2000)

Selv om dette fungerer, er det ikke garantert at funksjonen din vil kjøre nøyaktig etter to sekunder. Det vil definitivt ta minst så lang tid, men det kan ta mer.

Er setTimeout() nøyaktig?

Ja, men med noen forbehold. setTimeout() er en asynkron JavaScript-funksjon som betyr at den ikke blokkerer. Koden du planlegger legges til hendelsessløyfen mens resten av programmet fortsetter.

Etter at forsinkelsestiden har gått, vil programmet kjøre den planlagte koden, men bare når det er gratis å gjøre det. Hvis annen kode er i anropsstakken, vil den kjøres først, selv om den planlagte koden skal kjøres. Det er her ekstra forsinkelsestid kan oppstå, derav unøyaktigheten.

Tenk på følgende program.

console.log("Hei Verden!")

funksjonprintSetning() {
console.log("Bruker setTimeout()")
}

setTimeout (printSentence, 2000)
console.log("Ferdig")

Her er hva konsollen vil vise når du kjører den:

Hei Verden!
Ferdig
Bruker setTimeout()

Dette programmet introduserer en forsinkelse, men det forsinker bare koden det sendes til setTimeout(). Resten av programmet fortsetter, med den planlagte koden som bare avbryter det når varigheten har gått ut. Hvis du vil kjøre all denne koden i rekkefølge, med en pause i midten, ved hjelp av setTimeout() vil ikke fungere.

Et alternativ er å skrive synkron kode som vil blokkere kjøringen så lenge du trenger. Du kan for eksempel bruke en gjør mens løkke for å blokkere utførelsestråden til forsinkelsestiden er ute:

funksjonforsinkelse(ms) {
konst dato = Dato.nå();
la gjeldende dato = null;

gjøre {
gjeldende dato = Dato.nå();
} samtidig som (currentDate - dato < ms);
}

console.log("Hei Verden");
forsinkelse (2000);
console.log("Blir skrevet ut etter 2 sekunder!");

De forsinkelse() funksjon løkker inntil gjeldende tid er lik eller større enn starttiden pluss forsinkelsen. Ulempen med denne tilnærmingen er at den er CPU-intensiv, spesielt med store forsinkelser. De gjør... mens loop må beregne gjenværende tid etter hvert millisekund.

Bruk av Async/Await for å forsinke et Node.js-program

An avvente uttrykk får utføringen til å pause inntil et løfte er løst. Den lar deg kjøre asynkron kode som om den var synkron, men mer effektivt enn ved å blokkere kjøring manuelt. Du kan bare bruke vent inne i en funksjon merket asynkron.

funksjonforsinkelse(tid) {
komme tilbakenyLove(løse => setTimeout (løse, tid));
}

asynkronfunksjonprintSetning() {
console.log("Hei Verden")
avvente forsinkelse(2000);
console.log("Skrives ut etter 2 sekunder");
}

printSentence();

Dette er resultatet av programmet ovenfor:

Hei Verden
Skrives ut etter 2 sekunder

Bruker søvnløftepakken

De søvn-løfte pakken forenkler prosessen med å sette Node.js-programmer på pause. Du trenger bare å ringe det og spesifisere forsinkelsestiden i millisekunder.

Start med å installere den via npm:

npm installeresove-love

Her er et eksempel på hvordan du kan bruke det i programmet ditt:

konst sove = krever('søvn-løfte');

(asynkron () => {
console.log("Hei Verden.");
avvente sove(2000);
console.log("Skrives ut etter to sekunder.");
})();

Når du kjører programmet, vil utgangen være som følger.

Hei Verden.
Skrives ut etter to sekunder.

Velge en passende tilnærming

Det kan være vanskelig å implementere en søvnfunksjonalitet i Node.js. Når du bestemmer deg for hvordan du skal gå frem, vurder hva du ønsker å oppnå. Hvis du bare vil utsette en kode, i et minimum av tid, setTimeout() er et godt alternativ. Men hvis du ønsker å sette kjøringen av hele programmet på pause, bør du bruke asynkron/avvent.

Synkron vs. Asynkron programmering: Hvordan er de forskjellige?

Les Neste

DelekvitringDeleE-post

Relaterte temaer

  • Programmering
  • Webutvikling
  • Programmering
  • JavaScript

Om forfatteren

Mary Gathoni (19 artikler publisert)

Mary Gathoni er en programvareutvikler med en lidenskap for å lage teknisk innhold som ikke bare er informativt, men også engasjerende. Når hun ikke koder eller skriver, liker hun å henge med venner og være utendørs.

Mer fra Mary Gathoni

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!

Klikk her for å abonnere