JavaScript sleep/wait przed kontynuacją

Mam kod JavaScript, do którego muszę dodać funkcję sleep/wait. Kod, który uruchamiam jest już w funkcji, np:

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

Słyszałem, że możliwe rozwiązanie może zawierać

setTimeout

ale nie jestem pewien, jak go użyć w tym przypadku.

Nie mogę użyć PHP, ponieważ mój serwer go nie obsługuje, chociaż użycie jQuery byłoby w porządku.

Rozwiązanie

JS nie posiada funkcji sleep, posiada za to funkcje setTimeout() lub setInterval().

Jeśli możesz przenieść kod, który musisz uruchomić po pauzie do wywołania zwrotnego setTimeout(), możesz zrobić coś takiego:

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

zobacz przykład tutaj : http://jsfiddle.net/9LZQp/

To nie zatrzyma wykonywania twojego skryptu, ale tak długo jak setTimeout() jest funkcją asynchroniczną, ten kod

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

wydrukuje to w konsoli:

HELLO
DOG
THIS IS

(zauważ, że DOG jest wypisany przed THIS IS)


Możesz użyć poniższego kodu do symulowania uśpienia przez krótki okres czasu:

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

teraz, jeśli chcesz spać przez 1 sekundę, po prostu użyj:

sleep(1000);

przykład: http://jsfiddle.net/HrJku/1/

Proszę zauważyć, że ten kod spowoduje, że skrypt będzie zajęty przez n milisekund. To nie tylko zatrzyma wykonywanie skryptów Javascript na twojej stronie, ale w zależności od implementacji przeglądarki, może spowodować, że strona stanie się całkowicie nieresponsywna, a być może cała przeglądarka przestanie reagować. Innymi słowy jest to prawie zawsze zła rzecz do zrobienia.

Komentarze (16)