我正在使用带有socket.io的Node.js,并为计时器设置setInterval。
我有以下内容。我正在清除断开间隔,并在设置间隔之前进行检查。但是,如果我刷新页面很多,似乎不准确。控制台日志将以比一秒钟快得多的间隔显示“时间”并组合在一起。
有什么建议可以确保新计时器永远不会启动多次?
socket.on('disconnect', function () {
console.log('Disconnected');
clearInterval(timer);
});
if (typeof timer != 'undefined') {
clearInterval(timer);
}
var timer = setInterval(function() {
console.log('time');
}, 1000);
答案 0 :(得分:8)
有什么建议可以确保新计时器永远不会启动多次?
这正是setTimeout()
所做的......
如果您的意思“不止一次每秒”,您需要注意setInterval()
如果不是setTimeout()
会导致事件堆积起来及时处理。这将导致你的差距不到一秒钟。
唯一的答案是在超时处理程序本身内使用setTimeout
启动新的一次性计时器。在其自己的回调中递归调用{{1}}可确保一次只有一个计时器事件放在事件队列中。
答案 1 :(得分:-1)
页面重新加载会杀死所有计时器。问题出现在浏览器中:当你创建1秒间隔时,调用alert
Mozilla的SpiderMonkey间隔事件在警报关闭后变为1秒,而Google的V8在警报<1后运行1秒强>称为即可。
这是关于引擎中不同的代码流组织。