5 Sekunden warten, bevor die nächste Zeile ausgeführt wird

Diese Funktion unten funktioniert nicht, wie ich es will; ein JS-Anfänger zu sein, kann ich nicht herausfinden, warum.

Ich muss 5 Sekunden warten, bevor ich prüfe, ob der "newState" "1" ist.

Derzeit wartet sie nicht, sie prüft einfach sofort.

function stateChange(newState) {
  setTimeout('', 5000);

  if(newState == -1) {
    alert('VIDEO HAS STOPPED');
  }
}

Sie müssen Ihren Code in die Callback-Funktion einfügen, die Sie an setTimeout übergeben:

function stateChange(newState) {
    setTimeout(function () {
        if (newState == -1) {
            alert('VIDEO HAS STOPPED');
        }
    }, 5000);
}

Jeder andere Code wird sofort ausgeführt.

Kommentare (3)

Sie sollten nicht einfach versuchen, 5 Sekunden in Javascript zu pausieren. So funktioniert es nicht. Sie können eine Codefunktion so planen, dass sie in 5 Sekunden ausgeführt wird, aber Sie müssen den Code, den Sie später ausführen wollen, in eine Funktion einfügen, und der Rest Ihres Codes nach dieser Funktion wird sofort weiter ausgeführt.

Zum Beispiel:

function stateChange(newState) {
    setTimeout(function(){
        if(newState == -1){alert('VIDEO HAS STOPPED');}
    }, 5000);
}

Aber, wenn Sie Code wie diesen haben:

stateChange(-1);
console.log("Hello");

Die Anweisung console.log() wird sofort ausgeführt. Sie wird nicht warten, bis der Timeout in der Funktion stateChange() ausgelöst wurde. Man kann nicht einfach die Javascript-Ausführung für eine bestimmte Zeitspanne anhalten.

Stattdessen muss jeglicher Code, der verzögert ausgeführt werden soll, innerhalb der setTimeout() Callback-Funktion stehen (oder von dieser Funktion aufgerufen werden).

Wenn Sie versuchen würden, die Ausführung durch eine Schleife anzuhalten, würden Sie den Javascript-Interpreter für eine gewisse Zeit aufhalten. Da Javascript Ihren Code nur in einem einzigen Thread ausführt, kann während einer Schleife nichts anderes ausgeführt werden (keine anderen Event-Handler können aufgerufen werden). Eine Schleife, die darauf wartet, dass sich eine Variable ändert, wird also nie funktionieren, da kein anderer Code ausgeführt werden kann, um diese Variable zu ändern.

Kommentare (3)

Verwenden Sie eine Verzögerungsfunktion wie diese:

var delay = ( function() {
    var timer = 0;
    return function(callback, ms) {
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    };
})();

Verwendung:

delay(function(){
    // do stuff
}, 5000 ); // end delay

Credits gehen an den Benutzer CMS, siehe https://stackoverflow.com/q/1909441/1066234

Kommentare (0)