无法在nodejs中停止此递归settimeout函数

时间:2018-04-05 10:47:34

标签: javascript node.js

我做了这个递归设置超时功能来为每个游戏室发送时间但是当时间结束时我无法停止该功能。我尝试了明确的超时但是没有帮助,所以如果有人会帮助我。

setTimeout(function GameTime() {
    io.in(Rooms[picked].name).emit('PlayTime', timeleft);
    timeleft.x--; // HERE WHERE I DECREMENT THE TIME
    setTimeout(GameTime, 1000)
}, 1000)         

2 个答案:

答案 0 :(得分:0)

假设您没有停止循环,则必须使用函数clearTimeout停止循环。

更适合您的方案的方法是使用函数setInterval

var x = 3;
var intervalId = setInterval(function GameTime() {
    //io.in(Rooms[picked].name).emit('PlayTime', timeleft);
    //timeleft.x--; // HERE WHERE I DECREMENT THE TIME
    x--;
    if (x < 0)  {
      clearInterval(intervalId);
      console.log('finished!');
      return;
    }    
    
    console.log('looping!');
}, 1000) 

答案 1 :(得分:0)

您需要引用要清除的setTimeout:

&#13;
&#13;
App Builder -> Database Applications -> Create
&#13;
&#13;
&#13;

此代码段每1秒调用let timeoutId, gameTimeoutId timeoutId = setTimeout(function GameTime() { console.log('GameTime') gameTimeoutId = setTimeout(GameTime, 1000) }, 1000) setTimeout(function GameTime() { clearTimeout(timeoutId) clearTimeout(gameTimeoutId) }, 5000),5秒后删除间隔循环

作为替代方法,使用setInterval,这将简化您的代码:

&#13;
&#13;
GameTime
&#13;
&#13;
&#13;