Till skillnad från andra programmeringsspråk har JavaScript ingen inbyggd sömnmetod. Så du kan inte bara anropa en sleep()-funktion för att pausa ett Node.js-program. Det finns dock andra sätt att få ett program att vänta på en viss tid.

Den här handledningen diskuterar tre tillvägagångssätt: setTimeout, async/await och sömnlöftespaketet.

Använda setTimeout() för att vänta på en viss tid

De setTimeout() funktion schemalägger kod för att körtiden ska köras när en viss tid har passerat. Den accepterar en funktion och en fördröjningstid i millisekunder. Här är syntaxen:

setTimeout(fungera(), timeInMs)

Säg till exempel att du hade en funktion som skriver ut på konsolen:

fungeraprintMening() {
console.log("Använder setTimeout()")
}

För att köra ovanstående funktion efter att två sekunder har förflutit, skicka funktionen och fördröjningstiden på 2000ms till setTimeout() fungera:

setTimeout (printSentence, 2000)

Även om detta fungerar, är det inte garanterat att din funktion kommer att köras exakt efter två sekunder. Det kommer definitivt att ta minst så lång tid, men det kan ta mer.

Är setTimeout() korrekt?

Ja, men med några förbehåll. setTimeout() är en asynkron JavaScript-funktion vilket betyder att den är icke-blockerande. Koden du schemalägger läggs till i evenemangsslingan medan resten av ditt program fortsätter.

När fördröjningstiden har gått kommer ditt program att köra den schemalagda koden, men bara när det är gratis att göra det. Om annan kod finns i anropsstacken kommer den att köras först, även om den schemalagda koden ska köras. Det är här extra fördröjningstid kan uppstå, därav felaktigheten.

Tänk på följande program.

console.log("Hej världen!")

fungeraprintMening() {
console.log("Använder setTimeout()")
}

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

Här är vad konsolen kommer att visa när du kör den:

Hej världen!
Gjort
Använder setTimeout()

Det här programmet introducerar en fördröjning, men det fördröjer bara koden det skickas till setTimeout(). Resten av programmet fortsätter, med den schemalagda koden som bara avbryter det när varaktigheten har förflutit. Om du vill köra all denna kod i ordning, med en paus i mitten, med hjälp av setTimeout() kommer inte att fungera.

Ett alternativ är att skriva synkron kod som blockerar exekvering så länge du behöver. Du kan till exempel använda en göra medan loop för att blockera exekveringstråden tills fördröjningstiden är slut:

fungeradröjsmål(Fröken) {
konst datum = Datum.nu();
låta aktuellt datum = null;

do {
aktuellt datum = Datum.nu();
} medan (aktuellt datum - datum < ms);
}

console.log("Hej världen");
fördröjning (2000);
console.log("Kommer att skrivas ut efter 2 sekunder!");

De dröjsmål() funktion loopar tills den aktuella tiden är lika med eller större än dess starttid plus fördröjningen. Nackdelen med detta tillvägagångssätt är att det är CPU-intensivt, särskilt med stora förseningar. De gör... medan loop måste beräkna den återstående tiden efter varje millisekund.

Använda Async/Await för att fördröja ett Node.js-program

En vänta uttryck gör att körningen pausas tills ett löfte är löst. Den låter dig köra asynkron kod som om den vore synkron, men mer effektivt än genom att manuellt blockera exekvering. Du kan bara använda vänta i en funktion markerad asynkron.

fungeradröjsmål(tid) {
lämna tillbakanyLöfte(lös => setTimeout (lös, tid));
}

asynkronfungeraprintMening() {
console.log("Hej världen")
vänta dröjsmål(2000);
console.log("Kommer att skrivas ut efter 2 sekunder");
}

printSentence();

Detta är resultatet av programmet ovan:

Hej världen
Kommer att skrivas ut efter 2 sekunder

Använder sömnlöftespaketet

De sömn-löfte paketet förenklar processen att pausa Node.js-program. Du behöver bara ringa den och ange fördröjningstiden i millisekunder.

Börja med att installera den via npm:

npm Installerasova-löfte

Här är ett exempel på hur du kan använda det i ditt program:

konst sova = behöva('sömnlöfte');

(asynkron () => {
console.log("Hej världen.");
vänta sova(2000);
console.log("Kommer att skrivas ut efter två sekunder.");
})();

När du kör programmet blir resultatet enligt följande.

Hej världen.
Kommer att skrivas ut efter två sekunder.

Att välja ett lämpligt tillvägagångssätt

Att implementera en sömnfunktion i Node.js kan vara knepigt. När du bestämmer dig för hur du ska gå till väga, fundera över vad du vill uppnå. Om du bara vill fördröja någon kod, under en minsta tid, setTimeout() är ett bra alternativ. Men om du vill pausa körningen av hela ditt program bör du använda asynkronisera/vänta.

Synkron vs. Asynkron programmering: Hur är de olika?

Läs Nästa

Dela med sigTweetDela med sigE-post

Relaterade ämnen

  • Programmering
  • Webbutveckling
  • Programmering
  • JavaScript

Om författaren

Mary Gathoni (19 publicerade artiklar)

Mary Gathoni är en mjukvaruutvecklare med en passion för att skapa tekniskt innehåll som inte bara är informativt utan också engagerar. När hon inte kodar eller skriver tycker hon om att umgås med vänner och att vara utomhus.

Mer från Mary Gathoni

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera