第一次节点后setInterval无法正常工作

时间:2019-08-18 17:17:07

标签: javascript node.js socket.io setinterval

我有以下代码:

getWordsCount(){
  let count;
  count = this.database.executeSql("select count(*) from words", []);
  return count;
}

使用此代码,我试图检查用户是否尝试在3秒的间隔内发送4条以上的消息。我有var app = require('express')(); var server = require('http').createServer(app); var io = require('socket.io')(server); global.count = 0; io.on('connection', function(socket){ console.log('CONNECTED'); socket.on('message', function(msg){ var intVal = setInterval(function(){ global.count = 0; },3000); console.log(global.count); if(global.count == 4){ io.emit('freezeEvent'); global.count = 0; } else{ global.count++; io.emit('message',msg); clearInterval(intVal); } }); socket.on('disconnect', function () { console.log('DISCONNECTED'); }); }); server.listen(3000); 变量,每次发送消息时,我将其递增1。我的global.count函数每3秒钟将setInterval的值设为0,因此将其重置。在发送消息之前,我检查计数是否为4。如果是,则触发count。在我的前端,我有以下代码,如果触发freezeEvent,则该输入将禁用5秒钟:

freezeEvent

第一次运行代码时,我的输入在4条消息后被禁用,但是$(function () { var socket = io('socket.loc:3000'); socket.on('connect', function () { socket.on('freezeEvent', function(){ $('.inp').attr("disabled", true); setTimeout(function(){ $('.inp').attr("disabled",false); }, 5000); }); }); }); 从未重置为0。启用输入后,count完全混乱了。这是我第一次在控制台登录count后得到的内容:

count

您能告诉我是什么原因造成的,如何解决?

更新

我将后端代码更改为以下代码,计数器不再混乱。它始终从0到4。但是仍然存在的问题是,它每隔3秒仍不会重置。这是我的代码:

4
0
0
1
2
3
4
0
0
1
0
1
2
3
4

1 个答案:

答案 0 :(得分:1)

我怀疑是问题

if(global.count == 4){
    io.emit('freezeEvent');
    global.count = 0;
}
else{
    global.count++;
    io.emit('message',msg);
    clearInterval(intVal);
}

如果global.count小于4,则删除间隔,因此不适用于前[0-3]个值

另一件事:您的global.count是每个连接一个吗?