N秒ごとに(AJAX呼び出しを介して)条件をチェックするJavascriptがあります。その条件が真の場合、チェックを停止します。次の方法で実装しました。
var stopTimer;
var timerId = setInterval(function() {
/* Make Ajax Calls and set stopTimer */
if (stopTimer) {
clearInterval(timerId);
}
}, 10000);
しかし、私は不安定な振る舞いを見つけます:時々動作しますが、他の時には、それは永遠にチェックし続けます。私は(可能な限り)コードのどの部分にもエラーがないことを確認しました。
したがって、setIntervalハンドラー内でclearIntervalを呼び出すことが原因である可能性があると思われます。そうですか? setIntervalハンドラー内でclearIntervalを呼び出しても大丈夫ですか?
ご清聴ありがとうございました
安全です。問題はおそらく、stopTimerが期待どおりに設定されていないことに関係しています。
AJAX関数に誤りがない限り、コードに問題はないと思います。ループが停止しないという問題が発生しないように、AJAX関数の成功とエラーのコールバックに注意する必要があります。
また、サーバーを常にポーリングして応答を確認し、適切なアクションを実行していると思います。 Reverse AJAXを使用して、この種のプロセスを実行できます。
コード内の他の場所で同じタイマー名を誤って再使用しないようにしてください。これにより、定義する2番目のタイマーが常に停止します。
タイマーに一意の名前を付けるか、関数のスコープを設定します
var timerForAjax = setInterval(function() {
/* Make Ajax Calls and set stopTimer */
if (stopTimer)
{
clearInterval(timerForAjax);
}
}, 10000);
タイマーをinterval
と呼ぶのに不注意でしたが、同じスコープで両方ともinterval
と呼ばれる2つのタイマーを作成していることに気づきませんでした。 that はそれとは何の関係もないことに気付くまで、iOS8を約1時間非難しました。