簡體   English   中英

第一次節點后setInterval無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM