javascript - 确保 setInterval 不会重复自身

标签 javascript jquery node.js socket.io

我将 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/

相关文章:

javascript - 我怎样才能加钱?

jquery - 如何在动态创建的元素中应用jquery时间选择器(添加更多按钮)?

jquery ajax 不创建 golang session cookie

javascript - 引导标签输入 : Can't add objects when itemValue option is not set

javascript - 正则表达式与字符集中的 $ 不匹配

javascript - 计算对象数组中的特定数据

javascript - Mootools 验证与 jQuery Slide 的脚本冲突

javascript - 环回 - EmbedsOne 关系产生错误

javascript - Mongoose 排序不适用于 find()

javascript - 基本 jQuery 计算器