首页 > 解决方案 > Discord.js 等待 setTimeout 函数完成,然后允许它再次运行

问题描述

我一直在尝试解决这个问题,但似乎没有任何效果。每当有人尝试在计时器的 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);
    }

标签: javascriptdiscord.js

解决方案


setTimeout()返回一个 ID。您可以在某个全局状态中记住此 id,并且仅在全局状态中没有 timeoutid 时创建一个新的超时。执行超时回调后,不要忘记将其从全局状态中删除

let myGlobalState = {
  timeout = 0;
}





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


推荐阅读