gpt4 book ai didi

javascript - 在 setInterval 运行时使用 clearInterval

转载 作者:行者123 更新时间:2023-11-30 06:23:19 26 4
gpt4 key购买 nike

对使用 JS 相当陌生,并试图创建一个采用 JSON 数组的 Discord 机器人,从相关键中随机选择 1 个值,并每 24 小时自动输出一次(基本上是一天机器人的引用)。

我目前正在使用 setInterval 来执行此操作,但是,我无法在它运行时使用 clearInterval,只能使用 ctrl + C PowerShell。

client.on('message', function(message) {

if(message.author.bot) return;

if(message.content.indexOf(config.prefix) !== 0) return;

const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();

if (command === "qotd")
{
const intervalSet = args.join(" ")
message.channel.send(randomQuestion())
var interval = setInterval (function ()
{
//randomQuestion() is the function that returns the randomly selected value
//message.channel.send(randomQuestion()) is there twice so it runs once
//before the timer starts (otherwise it'll take x time to output once
message.channel.send(randomQuestion())
.catch(console.error) // add error handling here
return interval;
}, intervalSet);

}

if (command === "stopqotd")
{
clearInterval(interval);
}
});

我已经尝试将另一个带有 clearInterval(interval) 的命令放在同一个 client.on() 和单独的命令中,两者都不会阻止它。

它需要停止的唯一原因是添加/删除引号。否则,它只能无休止地运行。

有什么建议吗?

最佳答案

您的 interval 变量不在您尝试调用 clearInterval() 的位置范围内。

要修复,将其移动到更高的范围:

let interval;

if (command === 'qotd') {
// ...
interval = setInterval(function() {/*...*/}, intervalSet);
}

if (command === 'stopqotd') {
clearInterval(interval);
}

这仍然会让您处于这样一种情况:如果您收到多个 qotd 命令,您将有多个间隔运行,只有最后一个间隔会被 stopqotd 命令。

解决此问题的一种方法是在清除它后将 interval 设置为 undefined,并在 qotd 时测试该值收到指令。

let interval;

if (command === 'qotd') {
// ...
if (!interval) {
interval = setInterval(function() {/*...*/}, intervalSet);
} else {
message.channel.send('QOTD already running');
}
}

if (command === 'stopqotd') {
clearInterval(interval);
interval = undefined;
}

关于javascript - 在 setInterval 运行时使用 clearInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51851902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com