我有一個小的JavaScript代碼,我試圖用setTimeout
來等待某個外部輸入到達(通過responseReceived
變量),或者等待最大閾值時間,然後退出。在setTimeout中調用的函數沒有被調用
下面的代碼:
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);
}
的問題是由於某種原因setTimeout(..)
從來沒有實際調用內創建匿名函數。我通過在Chrome的JavaScript執行控件中放置斷點來檢查這一點,並且執行永遠不會停留在放置在匿名函數內的任何斷點處。 JavaScript的執行在while ..
行和setTimout(..)
行之間不斷切換。代碼中的其他位置設置了responseReceived
。另一種說法是,第一個警報顯示(警報1),但第二個警報從不顯示(警報2)。
我在做什麼錯?
編輯:
我通過報道的「重複」的問題去,但我看不出這是有關我的問題。我的問題不是關於while
循環。而是關於爲什麼內部匿名函數沒有被調用。
可能重複的[Javascript - 等到flag = true](http://stackoverflow.com/questions/22125865/javascript-wait-until-flag-true) –
我不確定這個問題是如何連接到我問的那個。我知道JavaScript是單線程的。問題不在於while循環。問題在於內部匿名函數由於某種原因未被調用。 – Ahmad
那是因爲你'while'循環永遠不會結束,所以你的計時器永遠不會有機會(單線程)。 –