[英]setInterval doesn't work correctly after first time Node
我有以下代碼:
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
變量,每次發送消息時,我都會將其遞增1。 我的setInterval
函數每隔3秒就會使count
的值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
您能告訴我是什么原因造成的,如何解決?
UPDATE
我將后端代碼更改為以下代碼,計數器不再混亂。 它始終從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是每個連接一個嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.