A differenza di altri linguaggi di programmazione, JavaScript non ha un metodo di sospensione integrato. Quindi non puoi semplicemente chiamare una funzione sleep() per mettere in pausa un programma Node.js. Tuttavia, ci sono altri modi per far attendere un programma per un tempo specificato.
Questo tutorial illustra tre approcci: setTimeout, async/await e il pacchetto sleep-promise.
Utilizzo di setTimeout() per attendere un tempo specifico
Il setTimeout() la funzione pianifica il codice per l'esecuzione del runtime una volta trascorso un determinato periodo di tempo. Accetta una funzione e un tempo di ritardo in millisecondi. Ecco la sintassi:
setTimeout(funzione(), timeInMs)
Ad esempio, supponiamo che tu abbia una funzione che stampa sulla console:
funzioneprintSentence() {
console.log("Utilizzo di setTimeout()")
}
Per eseguire la funzione di cui sopra dopo che sono trascorsi due secondi, passare la funzione e il tempo di ritardo di 2000 ms al setTimeout() funzione:
setTimeout (printSentence, 2000)
Sebbene funzioni, non è garantito che la tua funzione venga eseguita esattamente dopo due secondi. Ci vorrà sicuramente almeno quella quantità di tempo, ma potrebbe volerci di più.
setTimeout() è accurato?
Sì, ma con alcune avvertenze. setTimeout() è un funzione JavaScript asincrona il che significa che non è bloccante. Il codice pianificato viene aggiunto al ciclo degli eventi mentre il resto del programma continua.
Trascorso il tempo di ritardo, il tuo programma eseguirà il codice programmato, ma solo quando è libero di farlo. Se nello stack di chiamate è presente altro codice, verrà eseguito per primo, anche se è prevista l'esecuzione del codice pianificato. È qui che può verificarsi un tempo di ritardo aggiuntivo, da cui l'imprecisione.
Considera il seguente programma.
console.log("Ciao mondo!")
funzioneprintSentence() {
console.log("Utilizzo di setTimeout()")
}
setTimeout (printSentence, 2000)
console.log("Fatto")
Ecco cosa visualizzerà la console quando la esegui:
Ciao mondo!
Fatto
Utilizzo di setTimeout()
Questo programma introduce un ritardo, ma ritarda solo il codice a cui passa setTimeout(). Il resto del programma continua, con il codice programmato che lo interrompe solo una volta trascorsa la durata. Se vuoi eseguire tutto questo codice in ordine, con una pausa nel mezzo, usando setTimeout() non funzionerà.
Un'alternativa è scrivere codice sincrono che bloccherà l'esecuzione per tutto il tempo necessario. Ad esempio, potresti usare a fare durante loop per bloccare il thread di esecuzione fino allo scadere del tempo di ritardo:
funzioneritardo(SM) {
cost data = Data.adesso();
permettere data corrente = nullo;fare {
data corrente = Data.adesso();
} mentre (currentDate - data < ms);
}
console.log("Ciao mondo");
ritardo (2000);
console.log("Verrà stampato dopo 2 secondi!");
Il ritardo() la funzione esegue un ciclo fino a quando l'ora corrente è uguale o maggiore dell'ora di inizio più il ritardo. Lo svantaggio di questo approccio è che richiede molta CPU, specialmente con grandi ritardi. Il fare... mentre loop deve calcolare il tempo rimanente dopo ogni millisecondo.
Utilizzo di Async/Await per ritardare un programma Node.js
Un aspettare l'espressione fa sospendere l'esecuzione fino a quando una promessa non viene risolta. Ti consente di eseguire codice asincrono come se fosse sincrono, ma in modo più efficiente rispetto al blocco manuale dell'esecuzione. Puoi usare await solo all'interno di una funzione contrassegnata asincrono.
funzioneritardo(tempo) {
RestituzionenuovoPromettere(risolvere => setTimeout (risolvere, ora));
}asincronofunzioneprintSentence() {
console.log("Ciao mondo")
aspettare ritardo(2000);
console.log("Verrà stampato dopo 2 secondi");
}
printSentence();
Questo è l'output del programma di cui sopra:
Ciao mondo
Verrà stampato dopo 2 secondi
Utilizzando il pacchetto di promessa di sonno
Il sonno-promessa pacchetto semplifica il processo di sospensione dei programmi Node.js. Devi solo chiamarlo e specificare il tempo di ritardo in millisecondi.
Inizia installandolo tramite npm:
npm installaredormire-promettere
Ecco un esempio di come potresti usarlo nel tuo programma:
cost dormire = richiedere('promessa di sonno');
(asincrono () => {
console.log("Ciao mondo.");
aspettare dormire(2000);
console.log("Verrà stampato dopo due secondi.");
})();
Quando si esegue il programma, l'output sarà il seguente.
Ciao mondo.
Verrà stampato dopo due secondi.
Scegliere un approccio adatto
L'implementazione di una funzionalità di sospensione in Node.js può essere complicata. Quando decidi come farlo, considera ciò che vuoi ottenere. Se vuoi solo ritardare del codice, per un periodo di tempo minimo, setTimeout() è una buona opzione. Ma se vuoi mettere in pausa l'esecuzione dell'intero programma, dovresti usare asincrono/attendere.
Sincrono vs. Programmazione asincrona: in che cosa differiscono?
Leggi Avanti
Argomenti correlati
- Programmazione
- Sviluppo web
- Programmazione
- JavaScript
Circa l'autore
Mary Gathoni è una sviluppatrice di software con la passione per la creazione di contenuti tecnici non solo informativi ma anche coinvolgenti. Quando non sta programmando o scrivendo, le piace uscire con gli amici e stare all'aria aperta.
Iscriviti alla nostra Newsletter
Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!
Clicca qui per iscriverti