Más programozási nyelvekkel ellentétben a JavaScript nem rendelkezik beépített alvó móddal. Tehát nem hívhatja meg egyszerűen a sleep() függvényt a Node.js program szüneteltetéséhez. Vannak azonban más módok is arra, hogy egy programot várakozzon egy meghatározott ideig.

Ez az oktatóanyag három megközelítést tárgyal: setTimeout, async/await és a sleep-promise csomag.

A setTimeout() használata egy meghatározott időre való várakozáshoz

A setTimeout() A függvény beütemezi a futási környezet kódját, amely akkor fut le, amikor egy beállított idő eltelt. Elfogad egy függvényt és egy késleltetési időt ezredmásodpercben. Íme a szintaxis:

setTimeout(funkció(), timeInMs)

Tegyük fel például, hogy van egy funkciója, amely a konzolra nyomtat:

funkcióprintSentence() {
console.log("A setTimeout() használata")
}

A fenti funkció két másodperc elteltével történő futtatásához adja át a funkciót és a 2000 ms-os késleltetési időt a setTimeout() funkció:

setTimeout (printSentence, 2000)

Bár ez működik, nem garantált, hogy a funkció pontosan két másodperc múlva fog futni. Biztosan legalább ennyi időbe telik, de lehet, hogy több is.

instagram viewer

A setTimeout() pontos?

Igen, de néhány kitétellel. setTimeout() egy aszinkron JavaScript függvény ami azt jelenti, hogy nem blokkol. Az ütemezett kód hozzáadódik az eseményhurokhoz, miközben a program többi része folytatódik.

A késleltetési idő letelte után a program végrehajtja az ütemezett kódot, de csak akkor, ha ezt szabadon megteheti. Ha más kód is van a hívási veremben, akkor először az fut le, még akkor is, ha az ütemezett kód futni fog. Ez az a hely, ahol extra késleltetési idő léphet fel, ezért a pontatlanság.

Fontolja meg a következő programot.

console.log("Helló Világ!")

funkcióprintSentence() {
console.log("A setTimeout() használata")
}

setTimeout (printSentence, 2000)
console.log("Kész")

Íme, amit a konzol jelenít meg, amikor futtatja:

Helló Világ!
Kész
A setTimeout() használata

Ez a program késleltetést vezet be, de csak azt a kódot késlelteti, amelynek átadja setTimeout(). A program többi része folytatódik, az ütemezett kód csak az időtartam letelte után szakítja meg. Ha ezt a kódot sorrendben szeretné futtatni, szünettel a közepén, használja a setTimeout() nem fog működni.

Az egyik alternatíva az, hogy szinkron kódot ír, amely blokkolja a végrehajtást, ameddig csak szükséges. Például használhatja a csinálni, miközben hurok a végrehajtási szál blokkolásához, amíg a késleltetési idő le nem telik:

funkciókésleltetés(Kisasszony) {
const dátum = Dátum.Most();
hagyja aktuálisDátum = nulla;

csináld {
aktuálisDátum = Dátum.Most();
} míg (currentDate - dátum < ms);
}

console.log("Helló Világ");
késés (2000);
console.log("2 másodperc múlva kinyomtatásra kerül!");

A késleltetés() a függvény addig hurkol, amíg az aktuális idő egyenlő vagy nagyobb, mint a kezdési ideje plusz a késleltetés. Ennek a megközelítésnek az a hátránya, hogy CPU-igényes, különösen nagy késések esetén. A do...while loop minden ezredmásodperc után ki kell számítania a hátralévő időt.

Az Async/Await használata a Node.js program késleltetésére

An várja kifejezés a végrehajtás szüneteltetését okozza, amíg egy ígéret meg nem oldódik. Lehetővé teszi az aszinkron kód futtatását, mintha szinkron lenne, de hatékonyabban, mint a végrehajtás kézi blokkolásával. Csak a megjelölt függvényen belül használható a await async.

funkciókésleltetés(idő) {
VisszatérésújÍgéret(resolve => setTimeout (feloldás, idő));
}

asyncfunkcióprintSentence() {
console.log("Helló Világ")
várja késleltetés(2000);
console.log("2 másodperc múlva kerül kinyomtatásra");
}

printSentence();

Ez a fenti program kimenete:

Helló Világ
2 másodperc múlva kerül kinyomtatásra

Az alvásígéret csomag használata

A alvás-ígéret csomag leegyszerűsíti a Node.js programok szüneteltetésének folyamatát. Csak meg kell hívnia és megadnia a késleltetési időt ezredmásodpercben.

Kezdje az npm-en keresztüli telepítéssel:

npm telepítésalvás-ígéret

Íme egy példa arra, hogyan használhatja ezt a programban:

const alvás = igényelnek('alvási ígéret');

(async () => {
console.log("Helló Világ.");
várja alvás(2000);
console.log("Két másodperc múlva kinyomtatásra kerül.");
})();

A program futtatásakor a kimenet a következő lesz.

Helló Világ.
Két másodperc múlva kinyomtatásra kerül.

A megfelelő megközelítés kiválasztása

Az alvó funkció megvalósítása a Node.js-ben bonyolult lehet. Amikor eldönti, hogyan tovább, fontolja meg, mit szeretne elérni. Ha csak késleltetni szeretné egy kódot, minimális ideig, setTimeout() egy jó lehetőség. De ha a teljes program végrehajtását szüneteltetni szeretné, használja a async/wait.

Szinkron vs. Aszinkron programozás: miben különböznek egymástól?

Olvassa el a következőt

Ossza megCsipogOssza megEmail

Kapcsolódó témák

  • Programozás
  • Webfejlesztés
  • Programozás
  • JavaScript

A szerzőről

Mária Gathoni (19 cikk megjelent)

Mary Gathoni egy szoftverfejlesztő, aki szenvedélyesen hoz létre olyan technikai tartalmat, amely nem csak informatív, hanem vonzó is. Amikor nem kódol vagy ír, szívesen lóg a barátaival és a szabadban van.

Továbbiak Mary Gathonitól

Iratkozzon fel hírlevelünkre

Csatlakozzon hírlevelünkhöz műszaki tippekért, ismertetőkért, ingyenes e-könyvekért és exkluzív ajánlatokért!

Kattintson ide az előfizetéshez