setTimeout
を使用して外部入力が到着するのを待つ(最大変数を使用)か、または最大しきい値時間待つか、終了します。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番目のアラートが表示されないことです(アラート2)。
私は間違っていますか?
EDIT:
私は報告「複製」質問を通り抜けたが、私はそれは私の質問に関連しているかを確認することができません。私の質問はループwhile
に関するものではありません。内部匿名関数が呼び出されていない理由です。
[Javascript - waiting to flag = true](http://stackoverflow.com/questions/22125865/javascript-wait-until-flag-true) –
この質問がどのように接続されているかわかりません私が求めているもの。私はJavaScriptがシングルスレッドであることを知っています。問題は 'while'ループではありません。問題は、何らかの理由で内部無名関数が呼び出されないということです。 – Ahmad
これは、 'while'ループは決して終了しないので、あなたのタイマーはチャンスを得ることはありません(シングルスレッド)。 –