0

setInterval 関数を使用して X 秒ごとに非同期 JavaScript 関数を呼び出すと、間隔は前の実行が終了してから X 秒、または前の実行が呼び出されてから X 秒待機しますか? たとえば、通話のタイムラインを表示すると、次のようになります。

0 秒 : setInterval(funcX, 10000)
10 秒 : funcX - 実行に 3 秒かかります 20 秒 : funcX

また

0 秒 : setInterval(funcX, 10000)
10 秒 : funcX - 実行に 3 秒かかります 23 秒 : funcX

4

2 に答える 2

2

Mozilla のドキュメントから引用:

関数を呼び出すか、コード スニペットを繰り返し実行します。その関数の呼び出しごとに一定の時間遅延があります。

したがって、それは X 秒ごとです。ただし、関数の実行に X 秒以上かかる場合、スレッドはロックされ、解放されたときに実行されます。

JavaScriptのタイミングの詳細については、 John Resig の記事How JavaScript Timers Workをお勧めします。


関数が実行されてから X 秒後にしたい場合は、関数setTimeout()の最後でこれを使用して呼び出します。

runFunc();

function runFunc(){
   //code here....
   setTimeout(runFunc, 3000);
}

これにより、無限再帰が発生し、 がエミュレートさsetInterval()れますが、現在の関数の実行が終了してから X 秒の遅延が開始されるだけです。

于 2013-02-21T16:11:20.870 に答える
0

関数の実行に実際に 3 秒かかる場合は、深刻な問題があります。

Ajaxを使用しているため、これは特に関係ありません。実際の Ajax 呼び出しは実質的に瞬時に行われるはずです。

間隔が再び続く前にAjax 呼び出しを完了させたい場合setIntervalは、望ましくありません。setTimeout代わりに使用してください。

function atTime() {
    ajax().done(function () { setTimeout(atTime, 10000); });
}
atTime();
于 2013-02-21T16:17:14.317 に答える