Skirtingai nuo kitų programavimo kalbų, „JavaScript“ neturi integruoto miego režimo. Taigi, norėdami pristabdyti Node.js programą, negalite tiesiog iškviesti miego() funkcijos. Tačiau yra ir kitų būdų, kaip priversti programą laukti tam tikrą laiką.
Šioje pamokoje aptariami trys metodai: setTimeout, async/wait ir miego pažado paketas.
Naudodami setTimeout () laukite tam tikro laiko
The setTimeout() funkcija suplanuoja vykdymo laiko kodą, kuris bus vykdomas praėjus nustatytam laikui. Jis priima funkciją ir delsos laiką milisekundėmis. Štai sintaksė:
setTimeout(funkcija(), laikasInMs)
Pavyzdžiui, tarkime, kad turite funkciją, kuri spausdina konsolėje:
funkcijaspausdinti sakinį() {
console.log("Naudojant setTimeout()")
}
Norėdami paleisti aukščiau nurodytą funkciją po dviejų sekundžių, perduokite funkciją ir 2000 ms delsos laiką setTimeout() funkcija:
setTimeout (printSentence, 2000)
Nors tai veikia, negarantuojama, kad funkcija veiks tiksliai po dviejų sekundžių. Tai tikrai užtruks bent tiek laiko, bet gali užtrukti ir daugiau.
Ar setTimeout() tikslus?
Taip, bet su tam tikromis išlygomis. setTimeout() yra asinchroninė JavaScript funkcija tai reiškia, kad jis neblokuoja. Jūsų suplanuotas kodas pridedamas prie įvykių ciklo, kol tęsiasi likusi programa.
Praėjus delsos laikui, jūsų programa vykdys suplanuotą kodą, bet tik tada, kai bus laisva. Jei skambučių krūvoje yra kitas kodas, jis bus vykdomas pirmiausia, net jei numatytasis kodas turi būti paleistas. Čia gali atsirasti papildomas delsos laikas, todėl gali atsirasti netikslumas.
Apsvarstykite šią programą.
console.log("Labas pasauli!")
funkcijaspausdinti sakinį() {
console.log("Naudojant setTimeout()")
}
setTimeout (printSentence, 2000)
console.log("padaryta")
Štai ką konsolė parodys, kai ją paleisite:
Labas pasauli!
padaryta
Naudojant setTimeout()
Ši programa įveda delsą, tačiau ji tik atideda kodą, kuriam ji perduoda setTimeout(). Likusi programos dalis tęsiasi, o suplanuotas kodas ją nutraukia tik pasibaigus trukmei. Jei norite paleisti visą šį kodą eilės tvarka, su pauze viduryje, naudokite setTimeout() neveiks.
Viena iš alternatyvų yra rašyti sinchroninį kodą, kuris blokuotų vykdymą tol, kol jums reikia. Pavyzdžiui, galite naudoti a daryti... kol ciklas, skirtas blokuoti vykdymo giją, kol pasibaigs delsos laikas:
funkcijadelsimas(ms) {
konst data = Data.dabar();
leisti dabartinė data = nulinis;daryti {
dabartinė data = Data.dabar();
} kol (currentDate – data < ms);
}
console.log("Labas pasauli");
vėlavimas (2000 m.);
console.log("Bus atspausdinta po 2 sekundžių!");
The delsimas() funkcijos kilpos tol, kol dabartinis laikas yra lygus arba didesnis už jos pradžios laiką ir delsą. Šio metodo trūkumas yra tas, kad jis daug procesoriaus naudoja, ypač esant dideliam vėlavimui. The do...when loop turi apskaičiuoti likusį laiką po kiekvienos milisekundės.
Async/Await naudojimas norint atidėti Node.js programą
An laukti išraiška priverčia vykdymą pristabdyti, kol bus įvykdytas pažadas. Tai leidžia paleisti asinchroninį kodą taip, lyg jis būtų sinchroninis, bet efektyviau nei rankiniu būdu blokuojant vykdymą. Laukti galite naudoti tik pažymėtoje funkcijoje async.
funkcijadelsimas(laikas) {
grąžintinaujasPažadas(išspręsti => setTimeout (išspręsti, laikas));
}asyncfunkcijaspausdinti sakinį() {
console.log("Labas pasauli")
laukti delsimas(2000);
console.log("Bus išspausdinta po 2 sekundžių");
}
printSentence();
Tai yra aukščiau pateiktos programos išvestis:
Labas pasauli
Bus išspausdinta po 2 sekundžių
Miego pažado paketo naudojimas
The miego pažadas paketas supaprastina Node.js programų pristabdymo procesą. Jums tereikia jį iškviesti ir nurodyti delsos laiką milisekundėmis.
Pradėkite jį įdiegdami per npm:
npm diegtimiegoti-pažadas
Štai pavyzdys, kaip galite jį naudoti savo programoje:
konst miegas = reikalauti(„miego pažadas“);
(async () => {
console.log("Labas pasauli.");
laukti miegoti (2000);
console.log("Bus išspausdinta po dviejų sekundžių.");
})();
Kai paleisite programą, išvestis bus tokia.
Labas pasauli.
Bus išspausdinta po dviejų sekundžių.
Tinkamo požiūrio pasirinkimas
Miego funkcijos įdiegimas Node.js gali būti sudėtingas. Spręsdami, kaip tai daryti, apsvarstykite, ko norite pasiekti. Jei tiesiog norite atidėti tam tikrą kodą minimaliam laikui, setTimeout() yra geras pasirinkimas. Bet jei norite pristabdyti visos programos vykdymą, turėtumėte naudoti async/laukti.
Sinchroninis vs. Asinchroninis programavimas: kuo jie skiriasi?
Skaitykite toliau
Susijusios temos
- Programavimas
- Interneto kūrimas
- Programavimas
- JavaScript
Apie autorių

Mary Gathoni yra programinės įrangos kūrėja, kuri aistringai kuria techninį turinį, kuris būtų ne tik informatyvus, bet ir įtraukiantis. Kai ji nekoduoja ir nerašo, jai patinka leisti laiką su draugais ir būti lauke.
Prenumeruokite mūsų naujienlaiškį
Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. knygų ir išskirtinių pasiūlymų!
Spauskite čia norėdami užsiprenumeruoti