Ich bin ein JavaScript-Neuling und ich versuche, gleichzeitige Aktionen mit setInterval
und setTimeout
zu erreichen.Gleichzeitige Aktionen mit setInterval und setTimeout
Was ich erreichen möchte, was tatsächlich passiert und was ich erwartet habe, wird am besten mit dem folgenden Code erklärt.
var myVar = setInterval(function() {
myTimer()
}, 1000);
function myTimer() {
var d = new Date();
var t = d.toLocaleTimeString();
document.getElementById("demo").innerHTML = t;
}
for (var i = 0; i < 100; i++) {
setTimeout(function() {
console.log("log " + i);
}, 3000);
}
<p>A script on this page starts this clock:</p>
<p id="demo"></p>
Meine Erwartung für die führenden setInterval
ist, dass die Funktion myTimer
danach jede Sekunde, unabhängig von dem, was passiert, ausgeführt wird. Außer natürlich, wenn die Seite geschlossen ist oder clearTimeout
auf myVar
aufgerufen wird.
Ich kann nicht überprüfen, ob diese Aktion wirklich unabhängig und fortlaufend geschieht.
Die folgende for Schleife, gibt es weitere Code zu simulieren, um zu sehen, ob die myTimer
Funktion unabhängig ausgeführt werden würde.
Ich erwartete die Schleife mit i=0
zu starten, dann drei Sekunden warten, log log 0
an die Konsole, dann weiter mit i=1
und so weiter.
Stattdessen wird das Timeout gestartet und in der Zwischenzeit hat i
das Ende der for-Schleife erreicht und ist daher 100
.
Wie bekomme ich die for-Schleife mit der Iteration für die setTimeout
warten?
Und wird die setInterval
wirklich jede Sekunde ausgeführt, unabhängig vom folgenden Code? Z.B. Wenn der folgende Code Aktionen hat, die etwas Zeit benötigen, wird die Uhr während der Verarbeitung trotzdem aktualisiert?
können Sie hier nachschauen: http://StackOverflow.com/Questions/750486/Javascript-Closure-Inside-Loops-Simple-Practical-Beispiel –
Ich werde darüber gehen, danke. Wenn ich es richtig verstehe, betrifft es die Iteration und die i-Variable. Hast du einen Kommentar zu meinen Fragen zu 'setInterval' und' setTimeout'? – MikeDyson
Sie könnten dies auch nützlich finden [Gibt es eine Schlaffunktion in JavaScript?] (Http://stackoverflow.com/questions/1141302/is-there-a-sleep-function-in-javascript). Es sieht so aus, als ob Sie versuchen, die Ausführung mit settimeout zu unterbrechen - aber das wird nicht funktionieren, da settimeout die Ausführung nicht blockiert, indem es den Callback auf die Ereigniswarteschlange zu einem späteren Zeitpunkt setzt - der aktuelle Turn dann geht sofort weiter. –