在我们代码的几个地方,我们做了类似的事情:
eventGrabber.poller = setInterval(grabEvents, 50);
每隔50 ms调用一次grabEvents方法。但是,由于我们在不止一个地方这样做,我想知道是否每隔50ms更频繁地调用一次getEvents。换句话说,如果我这样做:
eventGrabber.poller = setInterval(grabEvents, 50);
//wait 25 ms here
eventGrabber.poller = setInterval(grabEvents, 50);
现在有两个定时器每25毫秒运行一次调用grabEvents(其中一个我们永远不能停止,因为我们丢失了它的句柄)?
将所有调用更改为此类问题会解决此问题(如果确实存在问题):
//if there is a timer running clear it out first
clearInterval(eventGrabber.poller); //if poller is null does it matter??
//now start the timer
eventGrabber.poller = setInterval(grabEvents, 50);
答案 0 :(得分:2)
是的,此时会有两个间隔运行。但是,“句柄”实际上只是一个整数。使用clearInterval需要一个数字作为参数,但是,如果它传递NaN,undefined,null等,它将默默地失败并继续前进。
我建议您根据问题结尾的建议筛选轮询并清除它。这可能是最好的做法。
根据您在网页上显示的计时器数量,您可以随时清除其中的每个计时器。尽管如此,这可能并不理想,具体取决于是否存在对页面操作至关重要的活动间隔。
var maxInterval = setInterval(function(){},10000);
for(var i = 0; i <= maxInterval; i++) clearInterval(i);
答案 1 :(得分:1)
是的,你会有多个间隔在运行,如果你封装它并做这样的事情:
function poller(callback, ms) {
var interval
return {
start: function() {
if (!interval) {
interval = setInterval(callback, ms)
}
},
stop: function() {
clearInterval(interval)
}
}
}
eventGrabber.poller = poller(grabEvents, 50)
eventGrabber.poller.start()
// ......
eventGrabber.poller.start()
这样你可以确定它不会运行多次:)