setInterval がランダムな引数を指定して関数を呼び出すのはなぜですか?
-
01-07-2019 - |
質問
そこで、興味深い問題が発生しています。機能があれば
// counter wraps around to beginning eventually, omitted for clarity.
var counter;
cycleCharts(chartId) {
// chartId should be undefined when called from setInterval
console.log('chartId: ' + chartId);
if(typeof chartId == 'undefined' || chartId < 0) {
next = counter++;
}
else {
next = chartId;
}
// ... do stuff to display the next chart
}
この関数はユーザーアクションによって明示的に呼び出すことができます。その場合、 chartId
が引数として渡され、選択されたチャートが表示されます。または、自動再生モードにすることもできます。その場合は、 setInterval
これは次のように初期化されます。
var cycleId = setInterval(cycleCharts, 10000);
奇妙なのは、私が実際に見ているのは、 cycleCharts()
入手する chartId
から呼び出された場合でも引数 setInterval
!の setInterval
に渡すパラメータさえありません。 cycleCharts
機能するので、なぜなのか非常に困惑しています chartId
が未定義でない場合 cycleCharts
から呼び出されます setInterval
.
解決
setInterval は、cycleCharts に実際のタイミング データを供給します (実際の実行時間を計算して、アニメーションで実用的な、あまり堅苦しくない応答を生成するために使用できます)
あなたが欲しい
var cycleId = setInterval(function(){ cycleCharts(); }, 10000);
(この動作は標準化されていない可能性があるため、あまり依存しないでください)
他のヒント
コールバックが呼び出されたのが何ミリ秒遅れたかがわかります。
varcycleId = setInterval(cycleCharts, 10000, 4242);
3 番目以降のパラメーターは関数に渡されるため、この例では chartId として 4242 を送信します。それがあなたが提起した質問に対する答えではないかもしれないことは承知していますが、あなたの問題の解決策になるかもしれません?取得される値は、メソッドの受け渡し/呼び出し時にスタック上にあるものからランダムであると思います。