Atšķirībā no citām programmēšanas valodām, JavaScript nav iebūvēta miega metode. Tātad jūs nevarat vienkārši izsaukt funkciju sleep(), lai apturētu Node.js programmu. Tomēr ir arī citi veidi, kā likt programmai gaidīt noteiktu laiku.

Šajā apmācībā ir aplūkotas trīs pieejas: setTimeout, async/await un miega solījuma pakotne.

SetTimeout() izmantošana, lai gaidītu noteiktu laiku

The setTimeout() funkcija ieplāno izpildlaika kodu, kas jāizpilda, kad ir pagājis noteikts laiks. Tas pieņem funkciju un aizkaves laiku milisekundēs. Lūk, sintakse:

setTimeout(funkcija(), timeInMs)

Piemēram, pieņemsim, ka jums ir funkcija, kas tiek drukāta konsolē:

funkcijadrukas teikums() {
console.log("Izmantojot setTimeout()")
}

Lai palaistu iepriekš minēto funkciju pēc divām sekundēm, nododiet funkciju un aizkaves laiku 2000 ms setTimeout() funkcija:

setTimeout (printSentence, 2000)

Kamēr tas darbojas, netiek garantēts, ka funkcija darbosies tieši pēc divām sekundēm. Tas noteikti prasīs vismaz tik daudz laika, bet tas var aizņemt vairāk.

Vai setTimeout() ir precīzs?

Jā, bet ar dažiem brīdinājumiem. setTimeout() ir asinhronā JavaScript funkcija kas nozīmē, ka tas nebloķē. Ieplānotais kods tiek pievienots notikumu cilpai, kamēr turpinās pārējā programma.

Kad aizkaves laiks būs pagājis, programma izpildīs ieplānoto kodu, bet tikai tad, kad tā būs brīva. Ja izsaukuma kaudzē ir cits kods, tas tiks izpildīts vispirms, pat ja ir jāpalaiž ieplānotais kods. Šeit var rasties papildu aizkaves laiks, līdz ar to arī neprecizitāte.

Apsveriet šādu programmu.

console.log("Sveika pasaule!")

funkcijadrukas teikums() {
console.log("Izmantojot setTimeout()")
}

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

Lūk, ko konsole parādīs, kad to palaižat:

Sveika pasaule!
Gatavs
Izmantojot setTimeout()

Šī programma ievieš aizkavi, bet tikai aizkavē kodu, kuram tā nodod setTimeout(). Pārējā programmas daļa turpinās, ieplānotais kods to pārtrauc tikai tad, kad ir pagājis ilgums. Ja vēlaties palaist visu šo kodu kārtībā, ar pauzi vidū, izmantojot setTimeout() nedarbosies.

Viena no alternatīvām ir rakstīt sinhronu kodu, kas bloķēs izpildi tik ilgi, cik nepieciešams. Piemēram, jūs varētu izmantot a darīt kamēr cilpa, lai bloķētu izpildes pavedienu, līdz ir beidzies aizkaves laiks:

funkcijakavēšanās(jaunkundze) {
konst datums = Datums.now();
ļaut pašreizējaisDatums = nulles;

darīt {
pašreizējaisDatums = Datums.now();
} kamēr (currentDate - datums < ms);
}

console.log("Sveika pasaule");
kavēšanās (2000. gads);
console.log("Tiks izdrukāts pēc 2 sekundēm!");

The kavēšanās () funkcija cilpas, līdz pašreizējais laiks ir vienāds ar sākuma laiku plus aizkave vai lielāks par to. Šīs pieejas negatīvā puse ir tā, ka tā ir procesora intensīva, īpaši ar lielu aizkavi. The darīt... kamēr cilpa ir jāaprēķina atlikušais laiks pēc katras milisekundes.

Async/Await izmantošana, lai aizkavētu Node.js programmu

An gaidīt izteiksme liek izpildei apturēt, līdz tiek atrisināts solījums. Tas ļauj palaist asinhrono kodu tā, it kā tas būtu sinhrons, taču efektīvāk nekā manuāli bloķējot izpildi. Jūs varat izmantot gaidīšanas funkciju tikai atzīmētajā funkcijā asinhrons.

funkcijakavēšanās(laiks) {
atgrieztiesjaunsApsolīt(atrisināt => setTimeout (atrisināt, laiks));
}

asinhronsfunkcijadrukas teikums() {
console.log("Sveika pasaule")
gaidīt kavēšanās (2000);
console.log("Tiks izdrukāts pēc 2 sekundēm");
}

printSentence();

Šī ir iepriekš minētās programmas izvade:

Sveika pasaule
Tiks izdrukāts pēc 2 sekundēm

Miega solījuma paketes izmantošana

The miega solījums pakotne vienkāršo Node.js programmu apturēšanas procesu. Jums tas tikai jāizsauc un jānorāda aiztures laiks milisekundēs.

Sāciet, instalējot to, izmantojot npm:

npm uzstādītGulēt- solījums

Šeit ir piemērs, kā to varētu izmantot savā programmā:

konst gulēt = pieprasīt('miega solījums');

(asinhrons () => {
console.log("Sveika pasaule.");
gaidīt Gulēt(2000);
console.log("Tiks izdrukāts pēc divām sekundēm.");
})();

Palaižot programmu, izvade būs šāda.

Sveika pasaule.
Tiks izdrukāts pēc divām sekundēm.

Piemērotas pieejas izvēle

Miega funkcionalitātes ieviešana pakalpojumā Node.js var būt sarežģīta. Izlemjot, kā rīkoties, apsveriet, ko vēlaties sasniegt. Ja vēlaties aizkavēt kādu kodu uz minimālu laiku, setTimeout() ir labs variants. Bet, ja vēlaties apturēt visas programmas izpildi, izmantojiet async/wait.

Sinhronā vs. Asinhronā programmēšana: kā tās atšķiras?

Lasiet Tālāk

DalītiesČivinātDalītiesE-pasts

Saistītās tēmas

  • Programmēšana
  • Web izstrāde
  • Programmēšana
  • JavaScript

Par autoru

Marija Gatoni (19 publicēti raksti)

Mary Gathoni ir programmatūras izstrādātāja, kuras aizraušanās ir tāda tehniska satura izveide, kas ir ne tikai informatīvs, bet arī saistošs. Kad viņa nekodē vai neraksta, viņai patīk pavadīt laiku ar draugiem un būt ārā.

Vairāk no Mary Gathoni

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai saņemtu tehniskos padomus, pārskatus, bezmaksas e-grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu