Na rozdíl od jiných programovacích jazyků nemá JavaScript vestavěnou metodu spánku. Nemůžete tedy jednoduše zavolat funkci sleep() k pozastavení programu Node.js. Existují však i jiné způsoby, jak můžete nechat program čekat po určitou dobu.

Tento tutoriál pojednává o třech přístupech: setTimeout, async/await a balíček sleep-promise.

Použití setTimeout() k čekání na určitou dobu

The setTimeout() funkce naplánuje spuštění kódu pro běhové prostředí, jakmile uplyne nastavená doba. Přijímá funkci a dobu zpoždění v milisekundách. Zde je syntaxe:

setTimeout(funkce(), timeInMs)

Řekněme například, že máte funkci, která vytiskne na konzole:

funkceprintSentence() {
console.log("Použití setTimeout()")
}

Chcete-li spustit výše uvedenou funkci po uplynutí dvou sekund, předejte funkci a dobu zpoždění 2000 ms setTimeout() funkce:

setTimeout (printSentence, 2000)

I když to funguje, není zaručeno, že se vaše funkce spustí přesně po dvou sekundách. Určitě to zabere minimálně tolik času, ale může to trvat déle.

Je setTimeout() přesný?

instagram viewer

Ano, ale s určitými výhradami. setTimeout() je asynchronní funkce JavaScriptu což znamená, že je neblokující. Kód, který naplánujete, se přidá do smyčky událostí, zatímco zbytek vašeho programu pokračuje.

Po uplynutí doby zpoždění váš program provede naplánovaný kód, ale pouze tehdy, když je to možné. Pokud je v zásobníku volání jiný kód, spustí se jako první, i když se má spustit naplánovaný kód. Zde může dojít k dodatečnému zpoždění, tedy k nepřesnosti.

Zvažte následující program.

console.log("Ahoj světe!")

funkceprintSentence() {
console.log("Použití setTimeout()")
}

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

Zde je to, co konzola zobrazí, když ji spustíte:

Ahoj světe!
Hotovo
Použití setTimeout()

Tento program zavádí zpoždění, ale pouze zpožďuje kód, kterému předá setTimeout(). Zbytek programu pokračuje, naplánovaný kód jej přeruší až po uplynutí doby trvání. Pokud chcete celý tento kód spustit v pořadí, s pauzou uprostřed, použijte setTimeout() to nebude fungovat.

Jednou z alternativ je napsat synchronní kód, který bude blokovat provádění tak dlouho, jak potřebujete. Můžete například použít a dělat, zatímco smyčka pro zablokování prováděcího vlákna, dokud neuplyne doba zpoždění:

funkcezpoždění(slečna) {
konst datum = datum.Nyní();
nechat aktuální datum = nula;

dělat {
aktuální datum = datum.Nyní();
} zatímco (currentDate - datum < ms);
}

console.log("Ahoj světe");
zpoždění (2000);
console.log("Vytiskne se po 2 sekundách!");

The zpoždění() funkční smyčky, dokud není aktuální čas roven nebo větší než jeho počáteční čas plus zpoždění. Nevýhodou tohoto přístupu je, že je náročný na CPU, zejména s velkými zpožděními. The do...během smyčka musí vypočítat zbývající čas po každé milisekundě.

Použití Async/Await ke zpoždění programu Node.js

An čekat výraz způsobí pozastavení provádění, dokud není příslib vyřešen. Umožňuje vám spouštět asynchronní kód, jako by byl synchronní, ale efektivněji než ručním blokováním provádění. Čekání můžete použít pouze uvnitř označené funkce asynchronní.

funkcezpoždění(čas) {
vrátit seNovýSlib(resolve => setTimeout (resolve, time));
}

asynchronnífunkceprintSentence() {
console.log("Ahoj světe")
čekat zpoždění(2000);
console.log("Vytiskne se po 2 sekundách");
}

printSentence();

Toto je výstup z výše uvedeného programu:

Ahoj světe
Vytiskne se po 2 sekundách

Použití balíčku sleep-promise

The spánek-příslib balíček zjednodušuje proces pozastavení programů Node.js. Stačí jej zavolat a zadat dobu zpoždění v milisekundách.

Začněte instalací přes npm:

npm Nainstalujtespát-slib

Zde je příklad toho, jak jej můžete použít ve svém programu:

konst spát = vyžadovat(„slib spánku“);

(asynchronní () => {
console.log("Ahoj světe.");
čekat spát(2000);
console.log("Vytiskne se po dvou sekundách.");
})();

Po spuštění programu bude výstup následující.

Ahoj světe.
Vytiskne se po dvou sekundách.

Výběr vhodného přístupu

Implementace funkce spánku v Node.js může být složitá. Když se rozhodujete, jak na to, zvažte, čeho chcete dosáhnout. Pokud chcete jen zdržet nějaký kód na minimální dobu, setTimeout() je dobrá volba. Ale pokud chcete pozastavit provádění celého vašeho programu, měli byste použít asynchronní/čekat.

Synchronní vs. Asynchronní programování: Jak se liší?

Přečtěte si další

PodíltweetPodílE-mailem

Související témata

  • Programování
  • Vývoj webu
  • Programování
  • JavaScript

O autorovi

Mary Gathoni (19 zveřejněných článků)

Mary Gathoni je vývojář softwaru s vášní pro vytváření technického obsahu, který je nejen informativní, ale také poutavý. Když zrovna nekóduje nebo nepíše, ráda se poflakuje s přáteli a je venku.

Více od Mary Gathoni

Přihlaste se k odběru našeho newsletteru

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné e-knihy a exkluzivní nabídky!

Chcete-li se přihlásit k odběru, klikněte sem