JavaScript : Sleep et setTimeout

Il arrive parfois qu'un programmeur doive interrompre l'exécution de son programme pendant un court moment. Pour ce faire, il existe diverses possibilités dans les différents langages de programmation. En JavaScript, il existe depuis ES6 l'option d'utiliser des promises à cet effet.

  • Interpréter une fonction de mise en sommeil
  • Exécuter une fonction avec un délai

Interpréter une fonction de mise en sommeil

Pour suspendre quelques secondes en JavaScript, il suffit de définir une petite fonction auxiliaire. La fonction Sleep renvoie un objet Promise dont l'état est mis à resolved après le temps souhaité en millisecondes.

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

Si vous souhaitez maintenant utiliser cette fonctionnalité, vous devez marquer votre fonction avec le mot-clé async-. Sans async, il n'est pas permis d'utiliser la commande await. Un exemple d'utilisation est donné par la fonction suivante:

async function test() {
console.log("Avant la fonction sleep");
await Sleep(3000) ; // met la fonction en pause pendant 3 secondes
console.log("Après la fonction sleep");
}

La fonction appelle la fonction Sleep. A l'aide de await , l'exécution de la fonction s'arrête pendant le temps indiqué. Sans await , l'exécution de la fonction se poursuivrait car elle n'attendrait pas la résolution de l'objet Promise renvoyé par Sleep.

Exécuter une fonction avec un délai

Pour exécuter une fonction après un certain temps d'attente, il existe la fonction setTimeout. Avec setTimeout, on passe une fonction à exécuter, dite fonction de rappel. Cette fonction est exécutée après le temps indiqué. Définissez donc une fonction à appeler:

function callback() {
console.log("La fonction callback est appelée");
}

Maintenant, vous pouvez utiliser setTimeout pour appeler la fonction que vous venez de créer avec le délai indiqué. Il faut cependant noter que le code suivant est exécuté sans temps d'attente :

setTimeout(callback, 3000) ; //appel de la fonction callback après 3 secondes
console.log("Test") ; //exécution immédiate, sans temps d'attente

Il est également possible de passer une expression de fonction comme argument pour setTimeout. Vous pouvez donc aussi appeler setTimeout de la manière suivante :

setTimeout(function() {
console.log("La fonction de rappel est appelée");
}, 3000);

L'avantage ici est qu'il n'est pas nécessaire de définir une nouvelle fonction et que l'on voit immédiatement quel bloc de code sera exécuté après le délai.