如何在 "setInterval" 的不同 if 语句中使用 "clearInterval"
How to use "clearInterval" in a different if statement to the "setInterval"
我已经尝试搜索其他示例,以自行解决此问题,但我对一般编码还很陌生,而且我对 java 脚本也很陌生,所以我提前为任何问题道歉我犯的愚蠢错误。
基本上,我正在学习 javascript,我认为一种很好的交互式学习方式是制作一个 discord 机器人,这样我就可以“看到”我的努力得到回报,从而保持我的动力。我认为一个基本的垃圾邮件机器人将是一个很好的起点,让我熟悉最基本的方面。
经过一些研究,我发现方法“setInterval”似乎非常适合我想要的应用程序。此方法将每隔给定时间间隔执行一行代码。
所以我可以让我的机器人向不和谐的频道发送垃圾邮件,但我遇到的这个问题是我是否想让它停止。
client.on('message', message => { //reacting when ever the 'message' EVENT occurs (e.g. a message is sent on a text channel in discord)
console.log('A message was detected and this is my reaction');
console.log(message.author + ' also knows as ' + message.author.username + ' said:\t' + message.content); //message.author is the value of the person who sent the message, message.content is the content of the message
if(message.author.bot) {
return null //returns nothing if the message author is the bot
} else if (message.content.startsWith(`${prefix}spam`)) {
let timerId = setInterval(() => { //starts to spams the channel
message.channel.send('spamtest');
}, 1500);
} else if (message.content.startsWith(`${prefix}stop`)) {
clearInterval(timerId);
message.channel.send('condition met');
}
});
我得到的错误是没有定义timerId。所以我认为那是因为它是一个局部变量,现在我很困惑。我不知道还能尝试什么,我对这么简单的事情感到非常沮丧,所以我希望这里有人能提供帮助。
谢谢
如 , the let
关键字所述,在当前块作用域中声明了一个变量,使其他块作用域(另一个 else if
块)无法访问该变量。
要解决此问题,您需要在全局范围内声明变量 timerId
,以便所有其他块范围都可以访问它:
let timerId; // declare timer in global scope
client.on('message', message => { //reacting when ever the 'message' EVENT occurs (e.g. a message is sent on a text channel in discord)
console.log('A message was detected and this is my reaction');
console.log(message.author + ' also knows as ' + message.author.username + ' said:\t' + message.content); //message.author is the value of the person who sent the message, message.content is the content of the message
if(message.author.bot) {
return null //returns nothing if the message author is the bot
} else if (message.content.startsWith(`${prefix}spam`)) {
timerId = setInterval(() => { //starts to spams the channel
message.channel.send('spamtest');
}, 1500);
} else if (message.content.startsWith(`${prefix}stop`)) {
clearInterval(timerId);
message.channel.send('condition met');
}
我已经尝试搜索其他示例,以自行解决此问题,但我对一般编码还很陌生,而且我对 java 脚本也很陌生,所以我提前为任何问题道歉我犯的愚蠢错误。
基本上,我正在学习 javascript,我认为一种很好的交互式学习方式是制作一个 discord 机器人,这样我就可以“看到”我的努力得到回报,从而保持我的动力。我认为一个基本的垃圾邮件机器人将是一个很好的起点,让我熟悉最基本的方面。
经过一些研究,我发现方法“setInterval”似乎非常适合我想要的应用程序。此方法将每隔给定时间间隔执行一行代码。
所以我可以让我的机器人向不和谐的频道发送垃圾邮件,但我遇到的这个问题是我是否想让它停止。
client.on('message', message => { //reacting when ever the 'message' EVENT occurs (e.g. a message is sent on a text channel in discord)
console.log('A message was detected and this is my reaction');
console.log(message.author + ' also knows as ' + message.author.username + ' said:\t' + message.content); //message.author is the value of the person who sent the message, message.content is the content of the message
if(message.author.bot) {
return null //returns nothing if the message author is the bot
} else if (message.content.startsWith(`${prefix}spam`)) {
let timerId = setInterval(() => { //starts to spams the channel
message.channel.send('spamtest');
}, 1500);
} else if (message.content.startsWith(`${prefix}stop`)) {
clearInterval(timerId);
message.channel.send('condition met');
}
});
我得到的错误是没有定义timerId。所以我认为那是因为它是一个局部变量,现在我很困惑。我不知道还能尝试什么,我对这么简单的事情感到非常沮丧,所以我希望这里有人能提供帮助。
谢谢
如 let
关键字所述,在当前块作用域中声明了一个变量,使其他块作用域(另一个 else if
块)无法访问该变量。
要解决此问题,您需要在全局范围内声明变量 timerId
,以便所有其他块范围都可以访问它:
let timerId; // declare timer in global scope
client.on('message', message => { //reacting when ever the 'message' EVENT occurs (e.g. a message is sent on a text channel in discord)
console.log('A message was detected and this is my reaction');
console.log(message.author + ' also knows as ' + message.author.username + ' said:\t' + message.content); //message.author is the value of the person who sent the message, message.content is the content of the message
if(message.author.bot) {
return null //returns nothing if the message author is the bot
} else if (message.content.startsWith(`${prefix}spam`)) {
timerId = setInterval(() => { //starts to spams the channel
message.channel.send('spamtest');
}, 1500);
} else if (message.content.startsWith(`${prefix}stop`)) {
clearInterval(timerId);
message.channel.send('condition met');
}