Discord.js 等待 setTimeout 函数完成,然后再次运行

时间:2021-01-08 18:16:52

标签: javascript discord.js

我一直在尝试解决这个问题,但似乎没有任何效果。每当有人尝试在计时器的 1 小时内使用命令 pqtimer 时,我希望它被忽略,因为只有在计时器完成后才允许用户激活计时器。

我已经阅读了一些关于异步函数的内容,但我无法让它工作,所以我不确定这是否是解决它的正确方法。

希望得到一些帮助!

if(command === 'pqtimer') {
        message.channel.send('Patreon quest timer started! (1hr)');
        setTimeout(function(){
            message.channel.send('Time for a new quest!');
            message.author.send(`Time for a new quest!`);
        }, 3600000);
    }

1 个答案:

答案 0 :(得分:0)

setTimeout() 返回一个 ID。您可以在某些全局状态中记住此 id,并且仅在全局状态中没有 timeoutid 时创建新的超时。别忘了把它从全局状态中移除,一旦超时回调被执行

let myGlobalState = {
  timeout = 0;
}





if (command === 'pqtimer' && !myGlobalState.timeout) {
  message.channel.send(' ... ');
  myGlobalState.timeout = setTimeout(function() {
     ...
     myGlobalState.timeout = 0;
  }, 3600000);
}