我将 Node.js 与 socket.io 结合使用,并为计时器设置了 setInterval。
我有以下内容。我正在清除断开连接的时间间隔,并在设置时间间隔之前进行检查。但是,如果我刷新页面很多,它似乎不准确。控制台日志将以比一秒快得多的间隔显示“时间”并组合在一起。
有什么建议可以确保新计时器永远不会启动多次?
socket.on('disconnect', function () {
console.log('Disconnected');
clearInterval(timer);
});
if (typeof timer != 'undefined') {
clearInterval(timer);
}
var timer = setInterval(function() {
console.log('time');
}, 1000);
最佳答案
Any suggestions to ensure that a new timer never initiates more than once?
这正是 setTimeout()
所做的...
如果您的意思可能是“每秒不止一次”,您需要注意 setInterval()
会导致事件堆积如果不及时处理。这将导致您的间隔不足一秒。
唯一的解决办法是在超时处理程序本身中使用 setTimeout()
启动一个新的一次性计时器。在其自己的回调中递归调用 setTimeout
可确保一次只有一个计时器事件被放入事件队列。
关于javascript - 确保 setInterval 不会重复自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9739826/