javascript - 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);
}
解决方案
setTimeout()
返回一个 ID。您可以在某个全局状态中记住此 id,并且仅在全局状态中没有 timeoutid 时创建一个新的超时。执行超时回调后,不要忘记将其从全局状态中删除
let myGlobalState = {
timeout = 0;
}
if (command === 'pqtimer' && !myGlobalState.timeout) {
message.channel.send(' ... ');
myGlobalState.timeout = setTimeout(function() {
...
myGlobalState.timeout = 0;
}, 3600000);
}
推荐阅读
- excel - 使用 vue.js 从 xlsx 文件中获取列数据
- c# - 如何将 MySql 数据库绑定到 Datagrid (UWP)
- javascript - 在 webflow 中为悬停时添加小部件的边框实现
- python - pygame 在 quit() 时仍然使用 .ttf 文件
- android - 如何在 ListTile 中插入颤振评级栏
- reactjs - API 路由中未定义 NextJS 环境变量
- react-native - React-native-agora 远程视频质量很差,只能卡死
- c++ - 如何将二进制文件的全部内容保存到 postgres 数据库中?
- linux - Bash 脚本通过 SSH 连接到服务器并将字符串变量从 CSV 复制到远程服务器
- python - 如何使用 blynk app 和 python 读取多个传感器数据?