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

Javascript 当用户断开连接时,如何停止服务器上的计时器?(Node.js/socket.io),javascript,node.js,timer,socket.io,Javascript,Node.js,Timer,Socket.io,服务器上有一个计时器,当它启动时,倒计时开始,但当用户离开页面时,计时器继续运行,并在用户不再在页面上时触发。如何在用户离开页面之前或页面已经离开时停止此计时器 //Timer function function startTimer() { console.log("Timer statrted!"); var countdown = 15000; setTimeout(function () { cons

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

    //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(“断开”)
socket.on(“断开”)
中停止
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();
         });

您需要存储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();
         });

无论如何,逻辑应该是封闭的。例如(不适用于此任务)


无论如何,逻辑应该是封闭的。例如(不适用于此任务)


您需要存储timerID并在ClearTimeOut中使用它。您需要存储timerID并在ClearTimeOutCorry中使用它,而不是用于此任务。关于计时器。抱歉,不适用于此任务。关于计时器。