JavaScript slaap/wacht alvorens verder te gaan

Ik heb een JavaScript code waar ik een slaap/wacht functie aan toe moet voegen. De code die ik uitvoer zit al in een functie, bijv:

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

Ik heb gehoord dat een mogelijke oplossing zou kunnen zijn

setTimeout

maar ik weet niet zeker hoe ik dat in dit geval moet gebruiken.

Ik kan geen PHP gebruiken, omdat mijn server dat niet ondersteunt, hoewel het gebruik van jQuery prima zou zijn.

Oplossing

JS heeft geen slaapfunctie, het heeft setTimeout() of setInterval() functies.

Als je de code die je na de pauze moet uitvoeren kunt verplaatsen naar de setTimeout() callback, kun je zoiets doen als dit:

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

zie voorbeeld hier : http://jsfiddle.net/9LZQp/

Dit zal de uitvoering van je script niet stoppen, maar zolang setTimeout() een asynchrone functie is, zal deze code

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

zal dit in de console worden afgedrukt:

HELLO
DOG
THIS IS

(merk op dat DOG wordt afgedrukt voor DIT IS)


U kunt de volgende code gebruiken om een slaap voor korte perioden te simuleren:

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

Nu, als je 1 seconde wilt slapen, gebruik dan gewoon:

sleep(1000);

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

Let op dat deze code zal uw script bezig houden voor n milliseconden. Dit zal niet alleen de uitvoering van Javascript op uw pagina stoppen, maar afhankelijk van de browser implementatie, kan het mogelijk de pagina compleet onresponsive maken, en mogelijk de hele browser onresponsive. Met andere woorden, dit is bijna altijd het verkeerde om te doen.

Commentaren (16)