我认为@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()
五分钟后调用
f()
登录到控制台,创建一个新的计时器,该计时器也f()
用作其回调,然后通过返回取消该计时器true
。
我的答案中的代码通过每次返回一个新的函数实例来解决问题。
当然,这比使用 更复杂,更难理解setInterval
,所以你应该这样做。