确保setInterval不会重复

dzm*_*dzm 2 javascript jquery node.js socket.io

我正在使用带有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);
Run Code Online (Sandbox Code Playgroud)

Aln*_*tak 8

有什么建议可以确保新计时器永远不会启动多次?

这正是setTimeout()......

如果您的意思是" 每秒超过一次",您需要注意,setInterval()如果不及时处理事件,将导致事件堆积起来.这将导致你的差距不到一秒钟.

唯一的答案是setTimeout()在超时处理程序本身内使用from 启动一个新的一次性计时器.调用setTimeout自己的回调中递归确保只有一次一个计时器事件没有把对事件队列.