javascript - 定时器使用 setInterval 来宣布剩余时间
问题描述
我是 JS 的菜鸟,但我正在尝试边做边学!我已经下载了一个免费的 GitHub 项目(https://github.com/MrWall112/advanced-discord-bot-easy-install),我正在尝试自定义计时器。
到目前为止,我已经添加了一个setInterval
事件,以便机器人每 30 秒宣布“30 秒过去了!” 3次。(通常,它将运行 30s、1m、1m30s 和 2m,因为它是用于私人战斗服务器的,以计时单个回合)。
使用setInterval
,机器人宣布 30 秒剩余 3 次,即使计时器已经过去(.timer 60s
,机器人仍然宣布 30 秒后超时)
我的问题是:有没有一种方法可以调整/更改setInterval
,以便机器人可以宣布:
msg.channel.send(msg.author.toString() + ` 60 SECONDS REMAINING! `)
msg.channel.send(msg.author.toString() + ` 30 SECONDS REMAINING! `)
msg.channel.send(msg.author.toString() + ` 10 SECONDS REMAINING! `)
那么,不是宣布 30 秒过去了 3 次,而是在特定秒内宣布剩余时间?
这是我当前的 JS 代码:
var ms = require('ms')
exports.run = (bot, msg, params) => {
let Timer = params[0];
if(!params[0]){
return msg.channel.send(":x: " + "| Please Enter a time period followed by \"s or m or h\"");
}
if(params[0] <= 0){
return msg.channel.send(":x: " + "| Please Enter a time period followed by \"s or m or h\"");
}
msg.channel.send(":white_check_mark: " + "| Timer Started for: " + `${ms(ms(Timer), {long: true})}`)
var i = 0;
var a = setInterval(function() {
if (i === 3) {
clearInterval(a);
}
else {
msg.channel.send(msg.author.toString() + ` 30 seconds passed! `)
i++;
}
}
, 30 * 1000);
setTimeout(function(){
msg.channel.send(msg.author.toString() + ` The Timer Has FINISHED!, it lasted: ${ms(ms(Timer), {long: true})}`)
}, ms(Timer));
};
解决方案
推荐阅读
- tensorflow - 我收到“来自未知节点的请求张量连接:“keras_layer_input:0””。加载keras模型时出错
- ionic-framework - Ionic appflow 实时更新不会出现在设备上
- javascript - 从 php 返回一个可迭代对象到 Ajax
- javascript - “text/html - npm http-server”的非 JavaScript MIME 类型
- c# - 从 .doc 格式的 word 文档的 base64String 转换为 png(mime application/octet-stream)
- loops - 为什么我的 for 循环 (i) 停止了 50,000 左右?
- lua - 重复直到循环后如何设置变量?
- javascript - 如何通过更改全局变量来更改 SurveyJS JSON 中的变量
- scala - 如何在火花中复制数据框中的前n行?
- reactjs - React Netlify 表单未提交