gpt4 book ai didi

javascript - 第一次 Node 后 setInterval 无法正常工作

转载 作者:行者123 更新时间:2023-12-02 23:06:57 25 4
gpt4 key购买 nike

我有以下代码:

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);


使用此代码,我尝试检查用户是否尝试在 3 秒的间隔内发送 4 条以上的消息。我有 global.count 变量,每次发送消息时,我都会将其加一。每 3 秒,我的 setInterval 函数就会将 count 的值设为 0,因此它会重置。在发送消息之前,我检查计数是否为 4。如果是,则触发 freezeEvent。在我的前端中,我有以下代码,如果 freezeEvent 被触发,它将禁用输入 5 秒:

$(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);
});

});
});

第一次运行代码时,我的输入在 4 条消息后被禁用,但 count 从未重置为 0。输入启用后,count 完全困惑向上。这是我第一次在控制台记录 count 后得到的结果:

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

您能告诉我造成此问题的原因以及如何解决吗?

更新

我已将后端代码更改为以下内容,并且计数器不再困惑。它总是从 0 到 4。但仍然存在的问题是它仍然不会在每 3 秒后重置。这是我的代码:

var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
global.count = 0;

global.intVal = setInterval(function(){
global.count = 0;
},3000);

io.on('connection', function(socket){
console.log('CONNECTED');

socket.on('message', function(msg){

console.log(global.count);

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

socket.on('disconnect', function () {
console.log('DISCONNECTED');
});
});

server.listen(3000);

最佳答案

我怀疑问题是

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 是每个连接一个?

关于javascript - 第一次 Node 后 setInterval 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57546770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com