@nrabinowitzの答えはおそらく最も簡単で最善だと思いますが、本当に使いたい場合は、次d3.timer
のようにします。
var interval = 1000; // one second in milliseconds
var makeCallback = function() {
// note that we're returning a new callback function each time
return function() {
console.log('OH HAI!!');
d3.timer(makeCallback(), interval);
return true;
}
};
d3.timer(makeCallback(), interval);
d3.js がタイマーを関数インスタンスにマップするため、コードは期待どおりに機能しません (こちらのコードを参照してください: https://github.com/mbostock/d3/blob/master/d3.v2.js#L4073 )。コードは次のことを行っていました:
- コールバックでタイマーを設定する
f()
f()
5分後に呼ばれる
f()
コンソールにログを記録し、f()
コールバックとしても使用する新しいタイマーを作成し、を返すことでそのタイマーをキャンセルしtrue
ます。
私の回答のコードは、毎回新しい関数インスタンスを返すことで問題を解決します。
もちろん、これは単に を使用するよりもはるかに複雑で理解しにくいため、使用setInterval
する必要があります。