SetInterval中的SetTimeout

时间:2017-08-23 04:58:43

标签: javascript node.js

我使用Node js作为服务器。为避免页面刷新时用户立即断开连接,并为重新加载提供缓冲时间,请按照SetInterval中的SetTimeout进行重新加载。用户被添加到数组"删除" on Disconnect事件。如果用户不返回,则最终将其删除。我是在 Cookies

的帮助下做到这一点的
var remove=[];
socket.on('disconnect', function(){ 
remove.push(socket.id);
});


setInterval(myTimer, 120000);
function myTimer()
{
  var removed = remove;
  remove=[];
  setTimeout(function()
  {
    for(i=0; i < removed.length; i++)
    {
      connection.query("DELETE FROM users WHERE socketid='"+removed[i]+"'");
      console.log(removed[i]+" is disconnected");
    }
  }, 60000);
}

代码工作正常。
但是在服务器端有这种循环是否可以?由于延迟执行,它们会不会重叠?会按时执行吗?

1 个答案:

答案 0 :(得分:0)

for (var i=0;i<=10;i++) {
   (function(ind) {
      setTimeout(function(){console.log(ind);}, 1000 + (3000 * ind));
   })(i);
}

在服务器端使用循环很好,但是你需要使用闭包来处理它们,就像上面的例子一样。 闭包将帮助他们在正确的上下文中执行代码,并避免重叠。