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.

0voto

Nalin Ranjan Punkte 1495

JavaScript ist eine Single-Thread-Ausführungsumgebung. Jede Funktion wird von nur einem Thread ausgeführt. Die Anforderung eines "Schlafs" bedeutet, dass die gesamte VM-Instanz für diese vielen (Milli-)Sekunden angehalten werden soll, was in der JavaScript-Welt meiner Meinung nach nicht sehr realistisch ist, da nicht nur diese spezielle Funktion, sondern auch alle anderen Ausführungen darunter leiden, wenn der ausführende Thread in den Schlaf versetzt wird.

Zunächst einmal ist es nicht möglich, diesen Faden tatsächlich zu verschlafen. Sie können nur versuchen, den Thread zu beschäftigen, indem Sie etwas Arbeit hineinstecken, ohne etwas zu tun. Wenn Sie jedoch nur einige Berechnungen verzögern wollen, legen Sie deren Ausführung in einen einzigen Funktionskontext und lassen Sie die Fortsetzung in einem setTimeout (oder einem Promise, wenn Sie dies bevorzugen) innerhalb dieser Funktion geschehen. Wenn Sie mit sleep etwas verzögern wollen, ist dies nicht möglich.

0voto

pomber Punkte 21013

Um den Hauptthread für einige Millisekunden zu beschäftigen:

function wait(ms) {
  const start = performance.now();
  while(performance.now() - start < ms);
}

-1voto

user2882556 Punkte 1

Ich verwende den Multithread HTML5 Worker, der in der Lage ist, eine synchrone XMLHttpRequest abzubrechen, die auf eine nicht reagierende URL zeigt. Dadurch wird der Browser nicht blockiert.

https://gist.github.com/el-gringo/6990785

-2voto

Shankar Punkte 117

Das Problem bei der Verwendung einer tatsächlichen Schlaf-Funktion ist, dass JavaScript ist Single-Thread und ein Schlaf-Funktion wird ziemlich viel machen Sie Ihren Browser-Tab für diese Dauer hängen.

-2voto

require('deasync').sleep(100);

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