Na rozdiel od iných programovacích jazykov JavaScript nemá zabudovanú metódu spánku. Takže nemôžete jednoducho zavolať funkciu sleep() na pozastavenie programu Node.js. Existujú však aj iné spôsoby, ako môžete nechať program čakať určitý čas.

Tento tutoriál pojednáva o troch prístupoch: setTimeout, async/await a balík sleep-promise.

Použitie setTimeout() na čakanie na konkrétny čas

The setTimeout() funkcia naplánuje spustenie kódu pre runtime po uplynutí nastaveného času. Akceptuje funkciu a čas oneskorenia v milisekundách. Tu je syntax:

setTimeout(funkciu(), timeInMs)

Povedzme napríklad, že máte funkciu, ktorá vytlačí na konzole:

funkciuprintSentence() {
console.log("Použitie setTimeout()")
}

Ak chcete spustiť vyššie uvedenú funkciu po uplynutí dvoch sekúnd, odovzdajte funkciu a čas oneskorenia 2000 ms setTimeout() funkcia:

setTimeout (printSentence, 2000)

Aj keď to funguje, nie je zaručené, že sa vaša funkcia spustí presne po dvoch sekundách. Určite to bude trvať aspoň toľko času, ale môže to trvať aj viac.

instagram viewer

Je setTimeout() presný?

Áno, ale s určitými výhradami. setTimeout() je asynchrónna funkcia JavaScript čo znamená, že je neblokovaný. Kód, ktorý naplánujete, sa pridá do slučky udalostí, zatiaľ čo zvyšok vášho programu pokračuje.

Po uplynutí času oneskorenia váš program spustí naplánovaný kód, ale iba vtedy, keď je to možné. Ak je v zásobníku hovorov iný kód, vykoná sa prvý, aj keď sa má spustiť naplánovaný kód. To je miesto, kde môže dôjsť k dodatočnému oneskoreniu, a teda k nepresnosti.

Zvážte nasledujúci program.

console.log("Ahoj svet!")

funkciuprintSentence() {
console.log("Použitie setTimeout()")
}

setTimeout (printSentence, 2000)
console.log("hotový")

Tu je to, čo konzola zobrazí, keď ju spustíte:

Ahoj svet!
hotový
Použitie setTimeout()

Tento program zavádza oneskorenie, ale oneskoruje iba kód, do ktorého prechádza setTimeout(). Zvyšok programu pokračuje, naplánovaný kód ho preruší až po uplynutí doby trvania. Ak chcete spustiť celý tento kód v poradí, s pauzou uprostred, použite setTimeout() nebudem pracovať.

Jednou z alternatív je napísať synchrónny kód, ktorý bude blokovať vykonávanie na tak dlho, ako potrebujete. Môžete napríklad použiť a robiť...zatiaľ slučka na zablokovanie vykonávacieho vlákna, kým neuplynie čas oneskorenia:

funkciumeškanie(pani) {
konšt dátum = Dátum.teraz();
nech aktuálny dátum = nulový;

robiť {
aktuálny dátum = Dátum.teraz();
} zatiaľ čo (aktuálny dátum - dátum < ms);
}

console.log("Ahoj svet");
oneskorenie (2000);
console.log("Vytlačí sa po 2 sekundách!");

The oneskorenie () funkčné slučky, kým aktuálny čas nebude rovnaký alebo väčší ako jeho počiatočný čas plus oneskorenie. Nevýhodou tohto prístupu je, že je náročný na CPU, najmä pri veľkých oneskoreniach. The do...pri slučke musí vypočítať zostávajúci čas po každej milisekunde.

Použitie funkcie Async/Await na oneskorenie programu Node.js

An čakať výraz spôsobí pozastavenie vykonávania, kým sa prísľub nevyrieši. Umožňuje vám spúšťať asynchrónny kód, ako keby bol synchrónny, ale efektívnejšie ako ručným blokovaním vykonávania. Čakanie môžete použiť iba vo vnútri označenej funkcie async.

funkciumeškanie(čas) {
vrátiťNovýSľub(vyriešiť => nastaviťČasový limit (vyriešiť, čas));
}

asyncfunkciuprintSentence() {
console.log("Ahoj svet")
čakať meškanie (2000);
console.log("Vytlačí sa po 2 sekundách");
}

printSentence();

Toto je výstup vyššie uvedeného programu:

Ahoj svet
Vytlačí sa po 2 sekundách

Používanie balíka sleep-promise

The spánok-sľub balík zjednodušuje proces pozastavenia programov Node.js. Stačí ho zavolať a určiť čas oneskorenia v milisekundách.

Začnite inštaláciou cez npm:

npm Inštaláciaspať-sľub

Tu je príklad, ako ho môžete použiť vo svojom programe:

konšt spánok = vyžadovať(„sľub spánku“);

(async () => {
console.log("Ahoj svet.");
čakať spať (2000);
console.log("Vytlačí sa po dvoch sekundách.");
})();

Keď spustíte program, výstup bude nasledujúci.

Ahoj svet.
Vytlačí sa po dvoch sekundách.

Výber vhodného prístupu

Implementácia funkcie spánku v Node.js môže byť zložitá. Keď sa budete rozhodovať, ako na to ísť, zvážte, čo chcete dosiahnuť. Ak chcete iba odložiť nejaký kód na minimálny čas, setTimeout() je dobrá možnosť. Ak však chcete pozastaviť vykonávanie celého programu, mali by ste použiť async/čakať.

Synchrónne vs. Asynchrónne programovanie: Ako sa líšia?

Prečítajte si ďalej

zdieľamTweetujtezdieľamEmail

Súvisiace témy

  • Programovanie
  • Vývoj webových aplikácií
  • Programovanie
  • JavaScript

O autorovi

Mary Gathoni (19 publikovaných článkov)

Mary Gathoni je softvérová vývojárka s vášňou pre vytváranie technického obsahu, ktorý je nielen informatívny, ale aj pútavý. Keď práve nekóduje alebo nepíše, rada sa stretáva s priateľmi a je vonku.

Viac od Mary Gathoni

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné e-knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber