Za razliku od drugih programskih jezika, JavaScript nema ugrađenu metodu mirovanja. Dakle, ne možete jednostavno pozvati funkciju sleep() da pauzirate Node.js program. Međutim, postoje i drugi načini na koje možete natjerati program da čeka određeno vrijeme.

Ovaj vodič govori o tri pristupa: setTimeout, async/await i paketu sleep-promise.

Korištenje setTimeout() za čekanje određenog vremena

The setTimeout() funkcija planira izvršavanje koda za vrijeme izvođenja nakon što prođe određeno vrijeme. Prihvaća funkciju i vrijeme kašnjenja u milisekundama. Evo sintakse:

setTimeout(funkcija(), vrijemeInMs)

Na primjer, recimo da ste imali funkciju koja ispisuje na konzoli:

funkcijaprintSentence() {
console.log("Korištenje setTimeout()")
}

Da biste pokrenuli gornju funkciju nakon dvije sekunde, proslijedite funkciju i vrijeme odgode od 2000 ms na setTimeout() funkcija:

setTimeout (printSentence, 2000.)

Iako ovo funkcionira, nije zajamčeno da će se vaša funkcija pokrenuti točno nakon dvije sekunde. Definitivno će trebati barem toliko vremena, ali može potrajati i više.

instagram viewer

Je li setTimeout() točan?

Da, ali uz neka upozorenja. setTimeout() je asinkrona JavaScript funkcija što znači da ne blokira. Kod koji planirate dodaje se u petlju događaja dok se ostatak vašeg programa nastavlja.

Nakon što vrijeme odgode prođe, vaš će program izvršiti zakazani kod, ali samo kada je slobodan za to. Ako je drugi kod u stogu poziva, on će se prvi izvršiti, čak i ako se planirani kod treba pokrenuti. Ovdje može doći do dodatnog vremena kašnjenja, otuda i netočnost.

Razmotrite sljedeći program.

console.log("Pozdrav svijete!")

funkcijaprintSentence() {
console.log("Korištenje setTimeout()")
}

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

Evo što će konzola prikazati kada je pokrenete:

Pozdrav svijete!
Gotovo
Korištenje setTimeout()

Ovaj program uvodi kašnjenje, ali samo odgađa kod na koji prolazi setTimeout(). Ostatak programa se nastavlja, a zakazani kod ga prekida tek nakon isteka trajanja. Ako želite pokrenuti sav ovaj kod redom, sa pauzom u sredini, koristite setTimeout() neće raditi.

Jedna od alternativa je pisanje sinkronog koda koji će blokirati izvršenje onoliko dugo koliko vam je potrebno. Na primjer, možete koristiti a učiniti...dok petlja za blokiranje izvedbene niti dok ne istekne vrijeme kašnjenja:

funkcijaodgoditi(ms) {
konst datum = Datum.sada();
neka trenutniDatum = null;

čini {
trenutniDatum = Datum.sada();
} dok (trenutniDatum - datum < ms);
}

console.log("Pozdrav svijete");
kašnjenje (2000.);
console.log("Ispisuje se nakon 2 sekunde!");

The odgoditi() funkcija petlje sve dok trenutno vrijeme nije jednako ili veće od vremena početka plus kašnjenje. Nedostatak ovog pristupa je što je procesorski intenzivan, osobito s velikim kašnjenjima. The do...while petlja mora izračunati preostalo vrijeme nakon svake milisekunde.

Korištenje Async/Await za odgodu Node.js programa

An čekati izraz uzrokuje pauzu izvršenja dok se obećanje ne riješi. Omogućuje vam pokretanje asinkronog koda kao da je sinkroni, ali učinkovitije nego ručnim blokiranjem izvršenja. Await možete koristiti samo unutar označene funkcije asink.

funkcijaodgoditi(vrijeme) {
povrataknoviObećanje(resolve => setTimeout (resolve, time));
}

asinkfunkcijaprintSentence() {
console.log("Pozdrav svijete")
čekati odgoditi(2000);
console.log("Ispisat će se nakon 2 sekunde");
}

printSentence();

Ovo je rezultat gornjeg programa:

Pozdrav svijete
Ispisat će se nakon 2 sekunde

Korištenje paketa obećanje sna

The san-obećanje paket pojednostavljuje proces pauziranja Node.js programa. Samo ga trebate pozvati i odrediti vrijeme odgode u milisekundama.

Počnite tako što ćete ga instalirati putem npm-a:

npm instaliratispavati-obećanje

Evo primjera kako ga možete koristiti u svom programu:

konst spavati = zahtijevati('obećanje sna');

(asink () => {
console.log("Pozdrav svijete.");
čekati spavati(2000);
console.log("Ispisat će se nakon dvije sekunde.");
})();

Kada pokrenete program, izlaz će biti sljedeći.

Pozdrav svijete.
Ispisat će se nakon dvije sekunde.

Odabir prikladnog pristupa

Implementacija funkcije mirovanja u Node.js može biti nezgodna. Kada odlučujete kako to učiniti, razmislite što želite postići. Ako samo želite odgoditi neki kod, na minimalno vrijeme, setTimeout() je dobra opcija. Ali ako želite pauzirati izvođenje cijelog programa, trebali biste ga koristiti async/await.

Sinkroni vs. Asinkrono programiranje: po čemu se razlikuju?

Pročitajte dalje

UdioCvrkutUdioE-mail

Povezane teme

  • Programiranje
  • Web razvoj
  • Programiranje
  • JavaScript

O autoru

Marija Gathoni (Objavljeno 19 članaka)

Mary Gathoni je programer softvera sa strašću za stvaranje tehničkog sadržaja koji nije samo informativan već i privlačan. Kad ne kodira i ne piše, uživa u druženju s prijateljima i na otvorenom.

Više od Mary Gathoni

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu