JavaScript: Sleep e setTimeout

A volte, come programmatore, ti trovi in una situazione in cui hai bisogno di interrompere l'esecuzione del tuo programma per un breve periodo. Per gestire questo, ci sono varie possibilità nei diversi linguaggi di programmazione. In JavaScript, a partire da ES6, c'è la possibilità di usare Promises per questo scopo.

  • Implementare una funzione sleep
  • Eseguire una funzione con ritardo

Implementare una funzione sleep

Per sospendere qualche secondo in JavaScript, è sufficiente definire una piccola funzione ausiliaria per se stessi. La funzione Sleep restituisce un oggetto Promise il cui stato è impostato su resolved dopo il tempo desiderato in millisecondi.

function Sleep(millisecondi) {
return new Promise(resolve => setTimeout(resolve, millisecondi));
<}

Se ora volete usare questa funzionalità, dovete marcare la vostra funzione con la parola chiave async-. Senza async non è permesso usare il comando await. Un esempio di utilizzo è mostrato nella seguente funzione:

async function test() {
console.log("Prima della funzione sleep");
await Sleep(3000); // Mette in pausa la funzione per 3 secondi
console.log("Dopo la funzione sleep");
}

La funzione chiama la funzione Sleep. Usando await si ferma l'esecuzione della funzione per il tempo specificato. Senza await la funzione continuerebbe ad essere eseguita perché non c'è attesa per la risoluzione dell'oggetto Promise restituito da Sleep.

Eseguire una funzione con ritardo

Per eseguire una funzione dopo un tempo di attesa specificato, esiste la funzione setTimeout. Con setTimeout si passa una cosiddetta funzione di callback da eseguire. Questa funzione viene eseguita dopo il tempo specificato. Quindi definite una funzione da chiamare:

function callback() {
console.log("Callback function is called");
}

Ora potete usare setTimeout per chiamare la funzione appena creata con il ritardo specificato. Notate, tuttavia, che il seguente codice sarà eseguito senza aspettare:

setTimeout(callback, 3000); //Chiama la funzione di callback dopo 3 secondi
console.log("Test"); //Viene eseguito immediatamente, senza aspettare

In alternativa, è anche possibile passare un'espressione funzione come argomento a setTimeout. Quindi puoi anche chiamare setTimeout come segue:

setTimeout(function() {
console.log("Callback function is called");
}, 3000);

Il vantaggio qui è che non è necessario definire una nuova funzione e puoi vedere immediatamente quale blocco di codice sarà eseguito dopo il ritardo.