web-dev-qa-db-ja.com

JavaScriptで0ミリ秒のsetInterval()の動作

私のアプリケーションでは、次のように、0ミリ秒でsetIntervalを使用しているJavaScriptコードを見つけました。

self.setInterval("myFunction()",0);

明らかに、これは私には良い考えではないようです。ここでsetIntervalの動作がどうなるか誰か教えてもらえますか? ( "myFunction"はAJAXサーバーを呼び出します)

アプリケーションで不規則な動作をしているので、これを求めています。 90%の場合、アプリケーションは正しく動作し、サーバーへの呼び出しは1回だけ行われます。ただし、サーバーに対して複数の呼び出しが行われることがあり(現在まで、最大48呼び出し)、このコード行のせいであるとほぼ確信しています。

21
João Gomes

ブラウザは間隔の最小値を設定しました。通常は10ミリ秒ですが、ブラウザによって異なります。これは、私が許される限り速くこれを繰り返すことを意味します。 W3C仕様は4msと言っています: http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#timers

これは正しいですが、おそらく設計エラーが明らかになります。

編集:ちなみに、JavaScriptにはファーストクラスの関数があるため、文字列をsetTimeout/setIntervalに渡し、代わりに関数を渡すことはお勧めできません。

24
deadalnix

setInterval(myFunction, 0)は最小の遅延でmyFunctionを継続的に呼び出します。これは、無限ループでmyFunctionを呼び出すのとほとんど同じです。ただし、ここではclearIntervalメソッドを使用してループを停止できます。

1
Narendra Yadala

わずかな遅延で1回だけ実行するには、代わりにsetTimeOutを使用します。

window.setTimeout(myFunction, 10);

AJAXを使用しているため、タイマーを使用する必要はまったくありません。現在のAJAXリクエストのコールバック(完了/成功イベント)で次のAJAXリクエストを呼び出すだけです。

現在のコードを投稿してください。さらにご案内できる場合があります。

myFunction()にはclearIntervalがあると思います。

基本的に、可能な限り頻繁に発生する可能性のある間隔を設定しました。 JavaScriptを実行しているブラウザーが、間隔の次の反復の前に実際にclearInterval部分に到達する場合、それは問題ありません。そうでなければ、それは何度も何度も起こります。

代わりにsetTimeoutを使用してください。

0
Brad