Erinevalt teistest programmeerimiskeeltest pole JavaScriptil sisseehitatud unerežiimi. Seega ei saa programmi Node.js peatamiseks lihtsalt funktsiooni sleep() kutsuda. Siiski on ka teisi viise, kuidas saate panna programmi teatud aja ootama.
Selles õpetuses käsitletakse kolme lähenemisviisi: setTimeout, async/await ja une-lubaduse pakett.
SetTimeout() kasutamine konkreetse aja ootamiseks
The setTimeout() funktsioon ajastab käitusaja koodi, mis käivitub pärast määratud aja möödumist. See aktsepteerib funktsiooni ja viiteaega millisekundites. Siin on süntaks:
setTimeout(funktsiooni(), timeInMs)
Oletame näiteks, et teil on funktsioon, mis prindib konsoolile:
funktsiooniprintLause() {
console.log("SetTimeout() kasutamine")
}
Ülaltoodud funktsiooni käivitamiseks pärast kahe sekundi möödumist edastage funktsioon ja viivitusaeg 2000 ms setTimeout() funktsioon:
setTimeout (printSentence, 2000)
Kuigi see töötab, ei ole garanteeritud, et teie funktsioon töötab täpselt kahe sekundi pärast. See võtab kindlasti vähemalt nii palju aega, kuid see võib võtta rohkem aega.
Kas setTimeout() on täpne?
Jah, kuid mõningate ettevaatusabinõudega. setTimeout() on an asünkroonne JavaScripti funktsioon mis tähendab, et see ei blokeeri. Teie ajastatud kood lisatakse sündmusetsüklisse, kuni ülejäänud programm jätkub.
Pärast viiteaja möödumist käivitab teie programm plaanitud koodi, kuid ainult siis, kui see on vaba. Kui kõnepinus on mõni muu kood, käivitub see esimesena, isegi kui plaanitud kood peaks käivituma. Siin võib tekkida täiendav viivitusaeg, millest tuleneb ebatäpsus.
Kaaluge järgmist programmi.
console.log("Tere, Maailm!")
funktsiooniprintLause() {
console.log("SetTimeout() kasutamine")
}
setTimeout (printSentence, 2000)
console.log("Valmis")
Konsool selle käivitamisel kuvab järgmist.
Tere, Maailm!
Valmis
SetTimeout() kasutamine
See programm lisab viivituse, kuid viivitab ainult koodi, millele see edastab setTimeout(). Ülejäänud programm jätkub, kusjuures ajastatud kood katkestab selle alles siis, kui kestus on möödas. Kui soovite kogu selle koodi käivitada järjekorras, pausiga keskel, kasutage setTimeout() ei tööta.
Üks alternatiiv on kirjutada sünkroonne kood, mis blokeerib täitmise nii kaua, kui vajate. Näiteks võite kasutada a teha...samal ajal silmus täitmise lõime blokeerimiseks, kuni viivitusaeg on täis:
funktsiooniviivitus(Prl) {
konst kuupäev = Kuupäev.now();
lase praegune kuupäev = null;teha {
praegune kuupäev = Kuupäev.now();
} samas (praeguneDate - kuupäev < ms);
}
console.log("Tere, Maailm");
viivitus (2000);
console.log("Prinditakse 2 sekundi pärast!");
The viivitus () funktsioon silmuseid, kuni praegune aeg on võrdne selle algusajaga pluss viivitusega või sellest suurem. Selle lähenemisviisi negatiivne külg on see, et see on protsessorimahukas, eriti suurte viivituste korral. The do...when loop peab arvutama iga millisekundi järel järelejäänud aja.
Async/Await kasutamine Node.js programmi edasilükkamiseks
An ootama väljend põhjustab täitmise peatamise, kuni lubadus on lahendatud. See võimaldab teil käivitada asünkroonset koodi nii, nagu see oleks sünkroonne, kuid tõhusamalt kui käivitamise käsitsi blokeerimine. Oota saab kasutada ainult märgitud funktsiooni sees asünkr.
funktsiooniviivitus(aega) {
tagasiuusLubadus(resolve => setTimeout (resolve, time));
}asünkrfunktsiooniprintLause() {
console.log("Tere, Maailm")
ootama viivitus (2000);
console.log("Prinditakse 2 sekundi pärast");
}
printSentence();
See on ülaltoodud programmi väljund:
Tere, Maailm
Prinditakse 2 sekundi pärast
Unelubaduse paketi kasutamine
The une-lubadus pakett lihtsustab Node.js programmide peatamise protsessi. Peate sellele ainult helistama ja määrama viiteaja millisekundites.
Alustage selle installimisega npm kaudu:
npm installidamagama- lubadus
Siin on näide selle kohta, kuidas saate seda oma programmis kasutada.
konst uni = nõuda('unetõotus');
(asünkr () => {
console.log("Tere, Maailm.");
ootama magama (2000);
console.log("Prinditakse kahe sekundi pärast.");
})();
Programmi käivitamisel on väljund järgmine.
Tere, Maailm.
Prinditakse kahe sekundi pärast.
Sobiva lähenemisviisi valimine
Unefunktsiooni rakendamine failis Node.js võib olla keeruline. Kui otsustate, kuidas edasi minna, kaaluge, mida soovite saavutada. Kui soovite lihtsalt mõnda koodi viivitada minimaalse aja jooksul, setTimeout() on hea variant. Kuid kui soovite kogu programmi täitmise peatada, peaksite kasutama asünkrooni/oota.
Sünkroonne vs. Asünkroonne programmeerimine: kuidas need erinevad?
Loe edasi
Seotud teemad
- Programmeerimine
- Veebiarendus
- Programmeerimine
- JavaScript
Autori kohta
Mary Gathoni on tarkvaraarendaja, kelle kirg on luua tehnilist sisu, mis pole mitte ainult informatiivne, vaid ka kaasahaarav. Kui ta ei kodeeri ega kirjuta, naudib ta sõpradega aega veetmist ja õues olemist.
Liituge meie uudiskirjaga
Liituge meie uudiskirjaga tehniliste näpunäidete, arvustuste, tasuta e-raamatute ja eksklusiivsete pakkumiste saamiseks!
Tellimiseks klõpsake siin