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.
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
Kapcsolódó témák
- Programozás
- Webfejlesztés
- Programozás
- JavaScript
A szerzőről
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.
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