javascript - 当用户断开连接时如何停止服务器上的计时器? (Node.js/socket.io)

标签 javascript node.js timer socket.io

服务器上有一个计时器,当它启动时,就开始倒计时,但是当用户离开页面时,计时器继续运行,并在用户不再在页面上时触发。如何在用户离开页面之前或已经离开时停止此计时器?

    //Timer function
    function startTimer() {
        console.log("Timer statrted!");
        var countdown = 15000;
        setTimeout(function () {
            console.log("Timer done!");
        }, 15000);
    }

    socket.on("get data", function() {
         io.to(room_name).emit("data");
         //call timer
         startTimer(); //"Timer started!", "user disconnected", (after 15s) "Timer done!"
     });



     socket.on("disconnect" ,function(){
         console.log("user disconnected");   
     });

我尝试在 socket.on("disconnect")socket.on("disconnecting") 中停止 clearTimeout(),但它们对已经离开页面的当前用户不起作用...它们仅对其他用户触发...

最佳答案

您需要存储timerID并在clearTimeout中使用相同的值

var socketTimer;
    function startTimer() {
            console.log("Timer statrted!");
            var countdown = 15000;
            socketTimer = setTimeout(function () {
                console.log("Timer done!");
            }, 15000);
        }

    function stopTimer (){
        clearTimeout(socketTimer);
    }
        socket.on("get data", function() {
             io.to(room_name).emit("data");
             //call timer
             startTimer(); //"Timer started!", "user disconnected", (after 15s) "Timer done!"
         });



         socket.on("disconnect" ,function(){
             console.log("user disconnected");   
             stopTimer();
         });

关于javascript - 当用户断开连接时如何停止服务器上的计时器? (Node.js/socket.io),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45917824/

相关文章:

javascript - Chess.js 库。确定胜者和败者

javascript - 如何使用 javascript、Angular 解析 doc/docx 文件

android - Android 上的延迟事件

java - 为什么在取消定时器任务之前让主线程进入休眠状态?

node.js - Node Express 内容长度

c# - 带有异步/等待的 System.Threading.Timer 卡在重复中

javascript - 如何使用 jquery-ui 使可拖动的 div 可调整大小

javascript - 我无法让我的机器人识别 react 并做出回应 (Discord.js)

node.js - 如果 nodejs 使用非阻塞 IO,那么 fs.readFileSync 是如何实现的?

javascript - 如何在html页面或jade页面中显示mongoose结果