Za razliko od drugih programskih jezikov JavaScript nima vgrajene metode spanja. Torej ne morete preprosto poklicati funkcije sleep(), da bi začasno zaustavili program Node.js. Vendar pa obstajajo drugi načini, kako lahko program počakate določen čas.
Ta vadnica obravnava tri pristope: setTimeout, async/await in paket obljube spanja.
Uporaba setTimeout() za čakanje na določen čas
The setTimeout() funkcija razporedi kodo za izvajanje, ko mine določen čas. Sprejema funkcijo in čas zakasnitve v milisekundah. Tukaj je sintaksa:
setTimeout(funkcijo(), timeInMs)
Recimo, da ste imeli funkcijo, ki tiska na konzolo:
funkcijoprintSentence() {
console.log("Uporaba setTimeout()")
}
Če želite zagnati zgornjo funkcijo po preteku dveh sekund, prenesite funkcijo in čas zakasnitve 2000 ms v setTimeout() funkcija:
setTimeout (printSentence, 2000)
Čeprav to deluje, ni zagotovljeno, da se bo vaša funkcija zagnala točno po dveh sekundah. Vsekakor bo trajalo vsaj toliko časa, lahko pa tudi več.
Ali je setTimeout() natančen?
Da, vendar z nekaj opozorili. setTimeout() je asinhrona funkcija JavaScript kar pomeni, da ne blokira. Koda, ki jo načrtujete, se doda v zanko dogodkov, medtem ko se preostali del programa nadaljuje.
Po preteku časa zakasnitve bo vaš program izvedel načrtovano kodo, vendar le, ko bo to lahko storil. Če je v skladu klicev druga koda, se bo prva izvršila, tudi če naj bi se načrtovana koda zagnala. Tu lahko pride do dodatnega časa zakasnitve, od tod tudi netočnosti.
Razmislite o naslednjem programu.
console.log("Pozdravljen, svet!")
funkcijoprintSentence() {
console.log("Uporaba setTimeout()")
}
setTimeout (printSentence, 2000)
console.log("Končano")
Tukaj je, kaj bo prikazala konzola, ko jo zaženete:
Pozdravljen, svet!
Končano
Uporaba setTimeout()
Ta program uvede zakasnitev, vendar zakasni samo kodo, h kateri posreduje setTimeout(). Preostali del programa se nadaljuje, pri čemer ga načrtovana koda prekine šele po preteku trajanja. Če želite zagnati vso to kodo po vrstnem redu, s premorom na sredini, uporabite setTimeout() ne bo delovalo.
Ena od možnosti je, da napišete sinhrono kodo, ki bo blokirala izvajanje tako dolgo, kot ga potrebujete. Na primer, lahko uporabite a delaj... medtem zanka za blokiranje izvedbene niti, dokler se čas zamude ne izteče:
funkcijozamuda(gospa) {
konst datum = Datum.zdaj();
pustiti trenutni datum = nič;narediti {
trenutni datum = Datum.zdaj();
} medtem (trenutniDatum - datum < ms);
}
console.log("Pozdravljen, svet");
zamuda (2000);
console.log("Natisnjen bo po 2 sekundah!");
The zamuda () funkcija zanke, dokler trenutni čas ni enak ali večji od njegovega začetnega časa plus zakasnitev. Slaba stran tega pristopa je, da je procesorsko intenziven, zlasti z velikimi zamudami. The do...while zanka mora izračunati preostali čas po vsaki milisekundi.
Uporaba Async/Await za odložitev programa Node.js
An čakati izraz povzroči premor izvajanja, dokler se obljuba ne razreši. Omogoča vam zagon asinhrone kode, kot da bi bila sinhrona, vendar učinkoviteje kot z ročnim blokiranjem izvajanja. Await lahko uporabite samo znotraj označene funkcije async.
funkcijozamuda(čas) {
vrnitevnovoObljubi(resolve => setTimeout (resolve, time));
}asyncfunkcijoprintSentence() {
console.log("Pozdravljen, svet")
čakati zamuda (2000);
console.log("Natisnjen bo po 2 sekundah");
}
printSentence();
To je rezultat zgornjega programa:
Pozdravljen, svet
Natisnjen bo po 2 sekundah
Uporaba paketa obljuba spanja
The spanje-obljuba paket poenostavi postopek zaustavitve programov Node.js. Poklicati ga morate le in določiti čas zakasnitve v milisekundah.
Začnite z namestitvijo prek npm:
npm namestitespati-obljuba
Tukaj je primer, kako ga lahko uporabite v svojem programu:
konst spanje = zahtevajo('sleep-promise');
(async () => {
console.log("Pozdravljen, svet.");
čakati spi (2000);
console.log("Natisnjen bo po dveh sekundah.");
})();
Ko zaženete program, bo rezultat naslednji.
Pozdravljen, svet.
Natisnjen bo po dveh sekundah.
Izbira primernega pristopa
Implementacija funkcije spanja v Node.js je lahko težavna. Ko se odločate, kako to storiti, razmislite, kaj želite doseči. Če želite samo nekaj kode odložiti za minimalno količino časa, setTimeout() je dobra možnost. Če pa želite začasno ustaviti izvajanje celotnega programa, uporabite async/await.
Sinhroni vs. Asinhrono programiranje: kako se razlikujejo?
Preberite Naprej
Povezane teme
- Programiranje
- Spletni razvoj
- Programiranje
- JavaScript
O avtorju

Mary Gathoni je razvijalka programske opreme s strastjo do ustvarjanja tehničnih vsebin, ki niso le informativne, ampak tudi privlačne. Ko ne kodira ali piše, uživa v druženju s prijatelji in na prostem.
Naročite se na naše novice
Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e-knjige in ekskluzivne ponudbe!
Kliknite tukaj, da se naročite