6 Stimmen

Schlafen in Javascript - kein setTimeout

Alle diese setTimeout-Antworten hier funktionieren nicht!

Ich möchte einfach ein paar Sekunden zwischen zwei Funktionen warten, so wie hier:

do_fn1();

warten(5000);

do_fn2();

19voto

planestepper Punkte 3179

Von phpied.com:

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

2voto

Andreas Jansson Punkte 2948

Ich glaube nicht, dass du das kannst. Du wirst wahrscheinlich müssen

do_fn1();
window.setTimeout(do_fn2, 5000);

2voto

BonyT Punkte 10490

Zwei Gedanken:

erstens, warum nicht alle Verzögerungsaussagen in eine Wrapper-Funktion packen

 var postDelayFunc = function(){
   machetwas();
   machetwasanderes();
   nochwas();
 }

dann übergeben Sie in Ihrem Code diese Funktion als Parameter an setTimeout.

 //dein code
 tuedas1();
 setTimeout(postDelayFunc, 1000);

Alternativ schauen Sie sich jQuery deferred an: http://msdn.microsoft.com/en-us/scriptjunkie/gg723713, obwohl Sie wahrscheinlich sehr ähnlichen Code schreiben werden.

Eine Sache fiel mir jedoch auf bei Ihren Antworten auf andere Antworten und möglicherweise wo die Verwirrung entsteht. Ich denke, Sie betrachten Ihre Funktion und sehen einen einzigen Thread, den Sie einfach eine Weile anhalten möchten, bevor Sie fortfahren.

Dies sollten Sie jedoch nicht in JavaScript tun, da es den gesamten Browser blockiert und die Benutzer verärgern wird. Stattdessen geben Sie mit setTimeout an, dass, wenn das Timeout abläuft, ein anderer Thread übernimmt und die übergebene Funktion ausführt.

Sobald das Timeout festgelegt wurde, wird der ausführende Thread mit der nächsten Zeile fortfahren (deshalb denken Sie, dass das Timeout nicht funktioniert). Was Sie wahrscheinlich tun müssen, ist das Timeout festzulegen und ALLE Nachausführungsschritte in die Funktion zu setzen, die an den Timer übergeben wird, wie oben angegeben.

0voto

Ben Punkte 1525

Zu sagen, dass sie alle ohne ein Beispiel nicht funktionieren, ist eine große Behauptung, denn ich bin mir sicher, dass sie wahrscheinlich funktionieren.

Wie wäre es mit diesem,

do_fn1();
setTimeout(do_fn2, 5000);

0voto

brymck Punkte 7434

All diese setTimeout-Antworten funktionieren hier nicht!

Natürlich tun sie das:

function a() {
  alert("Ich bin mir ziemlich sicher...");
}

function b() {
  alert("...dass sie einwandfrei funktionieren.");
}

a();
setTimeout(b, 5000);

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