JavaScript sleep/wait before continuing

Ich habe einen JavaScript-Code, dem ich eine sleep/wait-Funktion hinzufügen muss. Der Code, den ich ausführe, befindet sich bereits in einer Funktion, z. B:

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

Ich habe gehört, dass eine mögliche Lösung darin bestehen könnte

setTimeout

, aber ich bin mir nicht sicher, wie ich sie in diesem Fall verwenden soll.

Ich kann PHP nicht verwenden, da mein Server es nicht unterstützt, obwohl die Verwendung von jQuery in Ordnung wäre.

Lösung

JS verfügt nicht über eine Sleep-Funktion, sondern über die Funktionen setTimeout() oder setInterval().

Wenn Sie den Code, den Sie nach der Pause ausführen müssen, in den "setTimeout()"-Callback verschieben können, können Sie etwas wie folgt tun:

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

siehe Beispiel hier: http://jsfiddle.net/9LZQp/

Dies wird die Ausführung Ihres Skripts nicht anhalten, aber solange setTimeout() eine asynchrone Funktion ist, kann dieser Code

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

dies auf der Konsole ausgeben:

HELLO
DOG
THIS IS

(beachten Sie, dass DOG vor THIS IS gedruckt wird)


Sie können den folgenden Code verwenden, um einen Schlaf für kurze Zeit zu simulieren:

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

Wenn Sie nun für 1 Sekunde schlafen wollen, verwenden Sie einfach:

sleep(1000);

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

Bitte beachten Sie, dass dieser Code Ihr Skript für n Millisekunden beschäftigen wird. Dadurch wird nicht nur die Ausführung von Javascript auf Ihrer Seite gestoppt, sondern, je nach Browser-Implementierung, möglicherweise auch die Seite komplett unempfänglich gemacht und möglicherweise der gesamte Browser unempfänglich gemacht. Mit anderen Worten: Das ist fast immer der falsche Weg.

Kommentare (16)