运行 如果变量没有改变,则 10 秒后的代码

Run a code after 10s if a variable didn't change

我正在为使用 Discord.js API 的不和谐机器人制作游戏,如果变量正在播放 (true/false) 没有改变(以避免第一个人完成他的游戏而第二个人启动新游戏并在几秒钟后得到时间),所以我已经完成了 10 秒计时器但我无法解决第二个问题,所以这是我的代码的简化版本:

if(message.content === "?guess"){
playing = true;
  setTimeout(function(){
    message.reply("time's up!");
    playing = false;
  }, 10000);
}

只需在 setTimeout 回调中添加一个 if 条件来检查他们是否还在玩,然后才结束游戏。

const globalGameTimeout = null;

...
if(message.content === "?guess"){
  playing = true;

  globalGameTimeout = setTimeout(function(){
    if (playing) {
      message.reply("time's up!");
      playing = false;
    }
  }, 10000);
}

....
if (user guessed correctly or game ends in some other way) {
  clearTimeout(globalGameTimeout);
}

clearTimeout(..) 将确保旧的 setTimeout 不会在另一个玩家结束之前的游戏并开始新游戏时仍然错误地执行。