Spre deosebire de alte limbaje de programare, JavaScript nu are o metodă de repaus încorporată. Deci nu puteți apela pur și simplu o funcție sleep() pentru a întrerupe un program Node.js. Cu toate acestea, există și alte modalități prin care puteți face un program să aștepte o anumită perioadă de timp.

Acest tutorial discută trei abordări: setTimeout, async/wait și pachetul sleep-promise.

Folosind setTimeout() pentru a aștepta un timp specific

The setTimeout() funcția programează codul pentru ca timpul de execuție să fie executat odată ce a trecut o anumită perioadă de timp. Acceptă o funcție și un timp de întârziere în milisecunde. Iată sintaxa:

setTimeout(funcţie(), timeInMs)

De exemplu, să presupunem că aveți o funcție care se imprimă pe consolă:

funcţieprintSentence() {
console.log("Folosind setTimeout()")
}

Pentru a rula funcția de mai sus după ce au trecut două secunde, treceți funcția și timpul de întârziere de 2000 ms la setTimeout() funcţie:

setTimeout (printSentence, 2000)

În timp ce acest lucru funcționează, nu este garantat că funcția dvs. va rula exact după două secunde. Cu siguranță va dura cel puțin acest timp, dar poate dura mai mult.

SetTimeout() este corect?

Da, dar cu câteva avertismente. setTimeout() este o funcție JavaScript asincronă ceea ce înseamnă că este neblocant. Codul pe care îl programați este adăugat în bucla de eveniment în timp ce restul programului dvs. continuă.

După trecerea timpului de întârziere, programul dumneavoastră va executa codul programat, dar numai atunci când este liber să facă acest lucru. Dacă alt cod se află în stiva de apeluri, acesta se va executa mai întâi, chiar dacă codul programat urmează să fie rulat. Aici poate apărea un timp de întârziere suplimentar, de unde și inexactitatea.

Luați în considerare următorul program.

console.log("Salut Lume!")

funcţieprintSentence() {
console.log("Folosind setTimeout()")
}

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

Iată ce va afișa consola când o rulați:

Salut Lume!
Terminat
Folosind setTimeout()

Acest program introduce o întârziere, dar doar întârzie codul la care trece setTimeout(). Restul programului continuă, codul programat întrerupându-l doar după ce durata a trecut. Dacă doriți să rulați tot acest cod în ordine, cu o pauză la mijloc, folosind setTimeout() nu va funcționa.

O alternativă este să scrieți cod sincron care va bloca execuția atâta timp cât aveți nevoie. De exemplu, puteți folosi a face în timp ce buclă pentru a bloca firul de execuție până la expirarea timpului de întârziere:

funcţieîntârziere(Domnișoară) {
const data = Data.acum();
lăsa currentDate = nul;

do {
currentDate = Data.acum();
} in timp ce (currentDate - data < ms);
}

console.log("Salut Lume");
întârziere (2000);
console.log("Va fi imprimat după 2 secunde!");

The întârziere() funcția se face în bucle până când ora curentă este egală sau mai mare decât ora de pornire plus întârzierea. Dezavantajul acestei abordări este că consumă mult CPU, mai ales cu întârzieri mari. The face...while bucla trebuie să calculeze timpul rămas după fiecare milisecundă.

Utilizarea Async/Await pentru a întârzia un program Node.js

Un asteapta expresia face ca execuția să se întrerupă până când o Promisiune este rezolvată. Vă permite să rulați cod asincron ca și cum ar fi sincron, dar mai eficient decât prin blocarea manuală a execuției. Puteți utiliza așteptarea numai în interiorul unei funcții marcate asincron.

funcţieîntârziere(timp) {
întoarcerenouPromisiune(resolve => setTimeout (rezolvare, timp));
}

asincronfuncţieprintSentence() {
console.log("Salut Lume")
asteapta întârziere(2000);
console.log("Va fi imprimat după 2 secunde");
}

printSentence();

Aceasta este rezultatul programului de mai sus:

Salut Lume
Va fi imprimat după 2 secunde

Folosind pachetul sleep-promise

The somn-promisiune pachetul simplifică procesul de întrerupere a programelor Node.js. Trebuie doar să îl apelați și să specificați timpul de întârziere în milisecunde.

Începeți prin a-l instala prin npm:

npm instalaredormi-promisiune

Iată un exemplu despre cum l-ați putea folosi în programul dvs.:

const somn = cere(„promisiune de somn”);

(asincron () => {
console.log("Salut Lume.");
asteapta dormi(2000);
console.log("Va fi imprimat după două secunde.");
})();

Când rulați programul, rezultatul va fi după cum urmează.

Salut Lume.
Va fi imprimat după două secunde.

Alegerea unei abordări adecvate

Implementarea unei funcționalități de somn în Node.js poate fi dificilă. Când decideți cum să procedați, luați în considerare ceea ce doriți să obțineți. Dacă doriți doar să amânați un cod, pentru o perioadă minimă de timp, setTimeout() este o opțiune bună. Dar dacă doriți să întrerupeți execuția întregului program, ar trebui să utilizați asincron/așteaptă.

Sincron vs. Programare asincronă: prin ce diferă?

Citiți în continuare

AcțiuneTweetAcțiuneE-mail

Subiecte asemănătoare

  • Programare
  • Dezvoltare web
  • Programare
  • JavaScript

Despre autor

Mary Gathoni (19 articole publicate)

Mary Gathoni este un dezvoltator de software cu o pasiune pentru crearea de conținut tehnic care nu este doar informativ, ci și antrenant. Când nu codifică sau nu scrie, îi place să iasă cu prietenii și să fie în aer liber.

Mai multe de la Mary Gathoni

Aboneaza-te la newsletter-ul nostru

Alăturați-vă buletinului nostru informativ pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!

Click aici pentru a te abona