118 votes

Comment mettre en pause l'exécution du code javascript pendant 2 secondes

Je veux arrêter l'exécution pendant 2 secondes. Il en est de même, mais maintenant suit un bloc de code :

<html>
   <head>
      <title> HW 10.12 </title>
      <script type="text/javascript">
         for (var i = 1; i <= 5; i++) {
             document.write(i);
             sleep(2); //for the first time loop is excute and sleep for 2 seconds        
         };
      </script>
   </head>
   <body></body>
</html>

La première fois que la boucle est exécutée, elle est mise en veille pendant 2 secondes. Je veux arrêter l'exécution pendant deux secondes ?

149voto

Khanh TO Points 21297

Javascript est monofilaire, donc, par nature, il ne devrait pas y avoir de fonction sleep car dormir bloquerait le fil. setTimeout est un moyen de contourner ce problème en postant un événement dans la file d'attente pour qu'il soit exécuté plus tard sans bloquer le fil d'exécution. Mais si vous voulez une vraie fonction de sommeil, vous pouvez écrire quelque chose comme ceci :

function sleep(miliseconds) {
   var currentTime = new Date().getTime();

   while (currentTime + miliseconds >= new Date().getTime()) {
   }
}

Note : Le code ci-dessus est PAS recommandé.

73voto

James McLaughlin Points 11924

Il n'y a pas de moyen (sûr) de mettre l'exécution en pause. Vous pouvez cependant faire quelque chose comme ceci en utilisant setTimeout :

function writeNext(i)
{
    document.write(i);

    if(i == 5)
        return;

    setTimeout(function()
    {
        writeNext(i + 1);

    }, 2000);
}

writeNext(1);

51voto

Sachin Points 19502

Vous pouvez utiliser setTimeout pour ce faire

function myFunction() {
    // your code to run after the timeout
}

// stop for sometime if needed
setTimeout(myFunction, 2000);

6voto

Saman Gholami Points 979

Ce lien pourrait vous être utile.

Chaque fois que j'ai voulu une mise en veille au milieu de ma fonction, j'ai remanié pour utiliser un setTimeout().

4voto

sixFingers Points 773

Il n'y a aucun moyen d'arrêter l'exécution de votre code comme vous le feriez avec un langage procédural. En revanche, vous pouvez utiliser setTimeout et quelques astuces pour obtenir un délai paramétré :

for (var i = 1; i <= 5; i++) {
    var tick = function(i) {
        return function() {
            console.log(i);
        }
    };
    setTimeout(tick(i), 500 * i);
}

Démonstration ici : http://jsfiddle.net/hW7Ch/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X