3847 Stimmen

Was ist die JavaScript-Version von sleep()?

Gibt es einen besseren Weg zur Entwicklung einer sleep in JavaScript als die folgenden pausecomp Funktion ( entnommen von hier )?

function pausecomp(millis)
{
    var date = new Date();
    var curDate = null;
    do { curDate = new Date(); }
    while(curDate-date < millis);
}

Es handelt sich nicht um ein Duplikat von Sleep in JavaScript - Verzögerung zwischen Aktionen Ich möchte eine echter Schlaf in der Mitte einer Funktion und nicht eine Verzögerung, bevor ein Teil des Codes ausgeführt wird.

10voto

1j01 Punkte 3343

Wenn Sie weniger klobige Funktionen wollen als setTimeout y setInterval können Sie sie in Funktionen verpacken, die einfach die Reihenfolge der Argumente umkehren und ihnen schöne Namen geben:

function after(ms, fn){ setTimeout(fn, ms); }
function every(ms, fn){ setInterval(fn, ms); }

CoffeeScript Versionen:

after = (ms, fn)-> setTimeout fn, ms
every = (ms, fn)-> setInterval fn, ms

Sie können sie dann gut mit anonymen Funktionen verwenden:

after(1000, function(){
    console.log("it's been a second");
    after(1000, function(){
        console.log("it's been another second");
    });
});

Jetzt liest es sich leicht als "nach N Millisekunden, ..." (oder "alle N Millisekunden, ...")

10voto

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

9voto

naazgull Punkte 29

Ich kann den Zweck einer Sleep-Funktion verstehen, wenn man mit synchroner Ausführung zu tun hat. Die Funktionen setInterval und setTimeout erzeugen einen parallelen Ausführungsthread, der die Ausführungsreihenfolge an das Hauptprogramm zurückgibt, was ineffektiv ist, wenn man auf ein bestimmtes Ergebnis warten muss. Natürlich kann man Ereignisse und Handler verwenden, aber das ist in manchen Fällen nicht das, was beabsichtigt ist.

9voto

Ludolfyn Punkte 1355

Sie könnten etwa so vorgehen. Eine Schlafmethode, die alle Funktionen erben können:

Function.prototype.sleep = function(delay, ...args) {
    setTimeout(() => this(...args), delay)
}

console.log.sleep(2000, 'Hello, World!!')

8voto

Andrew Dunkman Punkte 1131

So einen Schlaf kann man in JavaScript nicht machen, oder besser gesagt, man sollte ihn nicht machen. Wenn Sie eine sleep- oder while-Schleife ausführen, bleibt der Browser des Benutzers hängen, bis die Schleife beendet ist.

Verwenden Sie eine Zeitschaltuhr, wie in dem von Ihnen angegebenen Link beschrieben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X