web-dev-qa-db-fra.com

JavaScript veille / attend avant de continuer

J'ai un code JavaScript pour lequel j'ai besoin d'ajouter une fonction veille/attente. Le code que je cours est déjà dans une fonction, par exemple:

function myFunction(time)
{
    alert('time starts now');
    //code to make the program wait before continuing
    alert('time is up')
}

J'ai entendu dire qu'une solution possible pourrait inclure

setTimeout

mais je ne suis pas sûr de savoir comment l'utiliser dans ce cas.

Je ne peux pas utiliser PHP, car mon serveur ne le supporte pas, bien que jQuery convienne.

280
user2370460

JS n’a pas de fonction de veille, mais setTimeout () ou setInterval () fonctions.

Si vous pouvez déplacer le code que vous devez exécuter après la pause dans le rappel setTimeout(), vous pouvez procéder comme suit:

//code before the pause
setTimeout(function(){
    //do what you need here
}, 2000);

voir exemple ici: http://jsfiddle.net/9LZQp/

Cela n'arrêtera pas l'exécution de votre script, mais tant que setTimeout() est une fonction asynchrone, ce code

console.log("HELLO");
setTimeout(function(){
    console.log("THIS IS");
}, 2000);
console.log("DOG");

imprimera ceci dans la console:

HELLO
DOG
THIS IS

(notez que CHIEN est imprimé avant ICI )


Vous pouvez utiliser le code suivant pour simuler un sommeil sur de courtes périodes:

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

maintenant, si vous voulez dormir pendant 1 seconde, utilisez simplement:

sleep(1000);

exemple: http://jsfiddle.net/HrJku/1/

veuillez noter que ce code tiendra votre script occupé pendant n millisecondes . Cela arrêtera non seulement l'exécution de Javascript sur votre page, mais, en fonction de l'implémentation du navigateur, pourrait rendre la page totalement insensible et éventuellement rendre l'ensemble du navigateur inactif . En d'autres termes, c'est presque toujours la mauvaise chose à faire.

524
BeNdErR