Ich habe einen kleinen JavaScript-Code, in dem ich versuche setTimeout
zu verwenden, entweder auf eine externe Eingabe warten (über responseReceived
Variable) ODER warten auf eine maximale Schwelle Zeit und dann kündige.Funktion aufgerufen in SetTimeout wird nicht aufgerufen
Hier ist der Code:
var MAX_WAIT_THRESHOLD = 5000;
var keepWaiting = true;
var waitInterval = 500;
var totalTimeWaited = 0;
alert("Alert1");
while(keepWaiting == true) {
setTimeout(function() {
totalTimeWaited = totalTimeWaited + waitInterval;
alert("Alert2");
if(responseReceived == true || totalTimeWaited >= MAX_WAIT_THRESHOLD) {
keepWaiting = false;
}
}, waitInterval);
}
Das Problem aus irgendeinem Grund ist setTimeout(..)
eigentlich nie ruft die anonyme Funktion darin erstellt. Ich habe dies überprüft, indem ich Haltepunkte in das JavaScript-Ausführungssteuerelement von Google gesetzt habe, und die Ausführung stoppt an keinem Haltepunkt innerhalb der anonymen Funktion. Die Ausführung von JavaScript wechselt zwischen der while ..
Zeile und der setTimout(..)
Zeile. responseReceived
wird an anderer Stelle im Code festgelegt. Eine andere Möglichkeit, dies zu sagen, ist, dass die erste Warnung (Alert1) anzeigt, die zweite jedoch nie (Alert2).
Was mache ich falsch?
EDIT:
Ich ging durch die ‚Duplikat‘ Frage berichtet, aber ich sehe nicht, wie das zu meiner Frage relevant ist. Meine Frage bezieht sich nicht auf die while
Schleife. Es geht vielmehr darum, warum die interne anonyme Funktion nicht aufgerufen wird.
Mögliches Duplikat von [Javascript - warte bis flag = true] (http://stackoverflow.com/questions/22125865/jascript-wait-until-flag-true) –
Ich bin nicht sicher, wie diese Frage verbunden ist die ich frage. Ich weiß, dass JavaScript single-threaded ist. Das Problem ist nicht mit der 'while' Schleife. Das Problem ist, dass die interne anonyme Funktion aus irgendeinem Grund nicht aufgerufen wird. – Ahmad
Das liegt daran, dass die "while" -Schleife niemals endet, sodass der Timer nie eine Chance bekommt (single threaded). –