Come aspettare o dormire l'esecuzione del codice in JavaScript

Come aspettare o dormire l'esecuzione del codice in JavaScript
Sonno è una funzione che è presente nella maggior parte dei linguaggi di programmazione e viene utilizzata per ritardare l'esecuzione del codice per un tempo specificato. JavaScript non ha questa funzione, quindi usiamo il setTimeout () funzione per eseguire lo stesso compito. Sebbene non funzioni esattamente come ci aspettiamo dalla funzione del sonno, la useremo per costruire la nostra funzione di sonno personalizzata in JavaScript, in questo articolo.

Ad esempio, se dobbiamo registrare tre messaggi alla console con un ritardo di un secondo, non possiamo farlo usando la funzione di sonno in JavaScript in quanto non è disponibile. Ma possiamo aggirare questo usando il setTimeout () funzione.

Qual è il metodo setTimeout ()?

IL setTimeout () Il metodo viene utilizzato per impostare un timer per ritardare l'esecuzione del codice. Esegue il pezzo di codice specificato dopo la scadenza del timer.

Molti sviluppatori che hanno lavorato con il sonno() Funzione Trova setTimeout () essere confuso. Questo perché scambiano il setTimeout () funzione per essere una versione del sonno() funzione in javascript.

Sfortunatamente, il setTimeout () ha le sue regole e non funziona come il sonno() La funzione fa quindi gli sviluppatori JavaScript devono trovare soluzioni ingegnose per farlo funzionare come a sonno() funzione.

In questa guida, esamineremo diverse soluzioni di questo tipo e spiegheremo come possiamo usare il setTimeout () funzione per mettere in pausa l'esecuzione del codice sorgente JavaScript e attendere tra le righe consecutive del codice.

non mi piace il sonno() funzione, se mettiamo solo un ritardo di un secondo usando il setTimeout () Metodo tra le righe del codice JavaScript, non funziona:

SetTimeout (1000)
console.Log ("Mostrare dopo un secondo")
SetTimeout (1000)
console.Log ("Mostrare dopo un altro secondo")

Il codice nell'esempio sopra eseguirà senza alcun ritardo come se il setTimeout () la funzione non esiste.

Il problema con il codice sopra indicato è che il setTimeout () Il metodo ritarda solo l'esecuzione della funzione che viene passata come funzione di callback. Tuttavia, ne abbiamo dato solo uno "ritardo"Argomento quando in realtà dovrebbe ottenere due argomenti diversi. Il primo argomento dovrebbe essere una funzione di callback e il secondo argomento dovrebbe essere il "ritardo". Ora proviamo a farlo e vediamo cosa succede:

setTimeout (() => console.log ("che mostra dopo un secondo"), 1000)
setTimeout (() => console.log ("che mostra dopo un altro secondo"), 1000)

Questa volta il setTimeout () La funzione funzionerà ma non come si suppone, poiché entrambi i messaggi di registro della console verranno visualizzati contemporaneamente invece di avere un ritardo di 1000 millisecondi tra di loro.

Allora perché setTimeout () ha fallito?

La ragione per cui setTimeout () fallisce nell'esempio sopra è che il setTimeout () La funzione stessa funziona in modo sincrono nel codice JavaScript ma la funzione call-back all'interno della funzione setTimeout () crea una nuova voce nella coda delle attività asincrona che viene eseguita dopo il tempo specificato.

Dal tempo specificato in entrambi i setTimeout () La funzione era la stessa e venivano eseguite contemporaneamente a causa dell'esecuzione del codice sincrono se JavaScript (con un ritardo di pochi millisecondi), tutte le voci nella coda asincrona delle attività eseguono contemporaneamente.

Come potete vedere, setTimeout () non è una copia esatta del sonno() Funzione, piuttosto che fa semplicemente la coda del codice per la successiva esecuzione. Quindi sorge la domanda, come facciamo a farlo funzionare come un sonno() funzione. Possiamo farlo usando timeout crescenti quando si chiama il setTimeout () funzione:

setTimeout (() => console.log ("che mostra dopo un secondo"), 1000)
setTimeout (() => console.Log ("Mostrare dopo un altro secondo"), 2000)

Funziona perché la nuova voce in coda viene creata all'incirca nello stesso momento, ma quelle voci devono attendere per essere eseguite diverse quantità di tempo.

Il metodo sopra indicato è il metodo utilizzato per ritardare l'esecuzione di alcune parti del codice mentre le altre parti eseguono in modo sincrono. Tuttavia, se si desidera fermare l'esecuzione dell'intero codice JavaScript mentre esegui in modo asincrono alcune altre parti, dovrai creare un'usanza sonno() funzione.

Come scrivere una funzione di sonno

In JavaScript, possiamo creare un'usanza sonno() funzione mediante promesse, asincroni e attesa. Funziona esattamente come a sonno() la funzione sarebbe in qualsiasi altra lingua.

Tuttavia, questa usanza sonno() La funzione deve essere utilizzata con la parola chiave di attesa e deve essere chiamata dalle funzioni asincriche.

var sleep = (ritardo) => new Promise ((resolve) => setTimeout (risoluzioni, ritardo))
var repetMessage = async () =>
Aspetta il sonno (1000)
console.Log ("Mostrare dopo un secondo")
Aspetta il sonno (1000)
console.Log ("Mostrare dopo un altro secondo")

ripetizione ();

Ora, utilizzando questo metodo di sonno build personalizzato, è possibile fermare l'esecuzione del codice JavaScript per la quantità di tempo desiderata.

Conclusione

JavaScript non ha il sonno() funzione per impostazione predefinita per ritardare l'esecuzione del codice, ma la sua natura asincrona può essere utilizzata per ottenere lo stesso compito. L'in -integrato setTimeout () Il metodo può essere utilizzato per ritardare l'esecuzione del codice, ma per rendere il codice asincrono in JavaScript e farlo funzionare come il sonno() funzione dobbiamo usare le funzioni di promesse, attesa e asincroni. In questo articolo, abbiamo imparato a creare personalizzati sonno() funzioni in javascript.