我有一些服务器端计时器,适用于socket.io:
// timer function
function startTimer() {
var countdown = 15000;
var serverInterval = setInterval(function () {
countdown -= 1000;
socket.in(room_name).emit('timer', {countdown: countdown});
}, 1000);
}
// timer usage
socket.on("start timer", function() {
startTimer()
}
但是当用户断开连接时,我想clearInterval
并停止该计时器:
socket.on('disconnect', function() {
clearInterval(serverInterval);
});
导致错误的原因" serverInterval未定义"。
如何在当前文档中创建变量global,但在整个项目中不是全局变量,并在用户断开连接时停止我的服务器端计时器?
答案 0 :(得分:1)
您可以使用函数存储serverInterval的上下文,如
var ServerInterval = (function () {
var serverInterval;
return {
set: function (obj) {
serverInterval = obj;
},
get : function() {
return serverInterval;
}
};
})();
// timer function
function startTimer() {
var countdown = 15000;
ServerInterval.set(setInterval(function () {
countdown -= 1000;
socket.in(room_name).emit('timer', {countdown: countdown});
}, 1000));
}
// timer usage
socket.on("start timer", function() {
startTimer()
}
socket.on('disconnect', function() {
clearInterval(ServerInterval.get());
});
然后使用getter / setter
调用它答案 1 :(得分:-1)
通过在全局范围内定义变量使变量成为全局变量,而不是var serverInterval = ...
应为global.serverInterval = ...
。
或者,更好的是,将变量附加到套接字对象:socket.serverInterval = ...
,并在断开连接中clearInterval(socket.serverInterval)
。