I modsætning til andre programmeringssprog har JavaScript ikke en indbygget søvnmetode. Så du kan ikke bare kalde en sleep()-funktion for at sætte et Node.js-program på pause. Der er dog andre måder, hvorpå du kan få et program til at vente på et bestemt tidspunkt.
Denne vejledning diskuterer tre tilgange: setTimeout, async/await og sleep-promise-pakken.
Brug af setTimeout() til at vente på et bestemt tidspunkt
Det setTimeout() funktion planlægger kode for, at kørselstiden skal udføres, når en bestemt tid er gået. Den accepterer en funktion og en forsinkelsestid i millisekunder. Her er syntaksen:
setTimeout(fungere(), timeInMs)
Lad os f.eks. sige, at du havde en funktion, der udskriver på konsollen:
fungereprintSætning() {
console.log("Brug af setTimeout()")
}
For at køre ovenstående funktion efter to sekunder er gået, skal du overføre funktionen og forsinkelsestiden på 2000ms til setTimeout() fungere:
setTimeout (printSentence, 2000)
Selvom dette virker, er det ikke garanteret, at din funktion kører nøjagtigt efter to sekunder. Det vil helt sikkert tage mindst så lang tid, men det kan tage mere.
Er setTimeout() nøjagtig?
Ja, men med nogle forbehold. setTimeout() er en asynkron JavaScript-funktion hvilket betyder, at den er ikke-blokerende. Den kode, du planlægger, føjes til begivenhedsløkken, mens resten af dit program fortsætter.
Når forsinkelsestiden er gået, vil dit program udføre den planlagte kode, men kun når det er gratis at gøre det. Hvis en anden kode er i opkaldsstakken, udføres den først, selvom den planlagte kode skal køre. Det er her, der kan opstå ekstra forsinkelsestid, deraf unøjagtigheden.
Overvej følgende program.
console.log("Hej Verden!")
fungereprintSætning() {
console.log("Brug af setTimeout()")
}
setTimeout (printSentence, 2000)
console.log("Færdig")
Her er, hvad konsollen viser, når du kører den:
Hej Verden!
Færdig
Brug af setTimeout()
Dette program introducerer en forsinkelse, men det forsinker kun koden, det sendes til setTimeout(). Resten af programmet fortsætter, hvor den planlagte kode først afbryder det, når varigheden er udløbet. Hvis du vil køre al denne kode i rækkefølge, med en pause i midten, vha setTimeout() vil ikke virke.
Et alternativ er at skrive synkron kode, der blokerer for eksekvering, så længe du har brug for det. For eksempel kan du bruge en gøre imens sløjfe for at blokere udførelsestråden, indtil forsinkelsestiden er udløbet:
fungereforsinke(Frk) {
konst dato = Dato.nu();
lade nuværende dato = nul;gør {
nuværende dato = Dato.nu();
} mens (aktuel dato - dato < ms);
}
console.log("Hej Verden");
forsinkelse (2000);
console.log("Udskrives efter 2 sekunder!");
Det forsinke() funktion sløjfer, indtil den aktuelle tid er lig med eller større end dens starttid plus forsinkelsen. Ulempen ved denne tilgang er, at den er CPU-intensiv, især med store forsinkelser. Det gør... mens loop skal beregne den resterende tid efter hvert millisekund.
Brug af Async/Await til at forsinke et Node.js-program
An vente udtryk får eksekveringen til at pause, indtil et løfte er løst. Det lader dig køre asynkron kode, som om den var synkron, men mere effektivt end ved manuelt at blokere udførelse. Du kan kun bruge afvent inde i en funktion markeret asynkron.
fungereforsinke(tid) {
Vend tilbagenyLøfte(resolve => setTimeout (resolve, time));
}asynkronfungereprintSætning() {
console.log("Hej Verden")
vente forsinke(2000);
console.log("Udskrives efter 2 sekunder");
}
printSentence();
Dette er resultatet af ovenstående program:
Hej Verden
Udskrives efter 2 sekunder
Brug af søvnløftepakken
Det søvn-løfte pakke forenkler processen med at sætte Node.js-programmer på pause. Du behøver kun at kalde det og angive forsinkelsestiden i millisekunder.
Start med at installere det via npm:
npm installeresøvn-løfte
Her er et eksempel på, hvordan du kan bruge det i dit program:
konst sove = kræve('søvn-løfte');
(asynkron () => {
console.log("Hej Verden.");
vente søvn(2000);
console.log("Udskrives efter to sekunder.");
})();
Når du kører programmet, vil outputtet være som følger.
Hej Verden.
Udskrives efter to sekunder.
Valg af en passende tilgang
Det kan være vanskeligt at implementere en søvnfunktion i Node.js. Når du beslutter dig for, hvordan du skal gøre det, skal du overveje, hvad du vil opnå. Hvis du bare vil forsinke en eller anden kode i et minimum af tid, setTimeout() er en god mulighed. Men hvis du ønsker at pause udførelsen af hele dit program, bør du bruge asynkron/afvent.
Synkron vs. Asynkron programmering: Hvordan er de forskellige?
Læs Næste
Relaterede emner
- Programmering
- Web-udvikling
- Programmering
- JavaScript
Om forfatteren

Mary Gathoni er en softwareudvikler med en passion for at skabe teknisk indhold, der ikke kun er informativt, men også engagerende. Når hun ikke koder eller skriver, nyder hun at hænge ud med venner og være udendørs.
Abonner på vores nyhedsbrev
Tilmeld dig vores nyhedsbrev for tekniske tips, anmeldelser, gratis e-bøger og eksklusive tilbud!
Klik her for at abonnere