我使用discord.js制作机器人;主要功能是运行良好,但我有一个for循环迭代对象;我从该对象获取一些信息并将其发送到一个频道;问题是它为每次迭代发送一条消息,它发送的速度太快;我尝试使用setInterval()
,但它没有工作;一个更好的解决方案是,如果我想在它被发送之前保留那些信息;这是我的代码:
var stat = []
var statNames = ['Speed', 'Special Defense', 'Special Attack', 'Defense',
'Attack', 'HP']
for(x in response.stats) {
stat = {"base": response.stats[x].base_stat,
"effort": response.stats[x].effort}
msg.channel.sendMessage(statNames[x] + ": " + stat.base + " - EV: " + stat.effort)
}
如果我把msg.channel.sendMessage
放在循环之外;消息未正确发送,静止图像每1发送一次消息;我只想发送它们作为一条消息;它运行了6次,因此有6条消息发送得太快,我可能会受到速率的限制。
答案 0 :(得分:0)
如果您只想通过循环中的所有迭代发送一条带有组合字符串的消息,那么您可以在for
循环中累积结果并发送一条带有组合字符串的消息。
var accumulatedResults = [];
for (x in response.stats) {
// push string into the array to accumulate it
accumulatedResults.push(statNames[x] + ": " + response.stats[x].base_stat + " - EV: " + response.stats[x].effort);
}
// Now convert the array to JSON and send it all in one message
// The receiving side can use JSON.parse() to turn it back into an array
msg.channel.sendMessage(JSON.stringify(accumulatedResults));
您可以自由选择邮件中所需的任何格式,以便在一封邮件中发送多个项目。我使用了JSON,因为很容易获取一个数组并将其转换为单个字符串进行发送,然后在发送端使用JSON.stringify()
并在接收端使用JSON.parse()
获取另一端的数组。但是,如果需要,可以使用逗号分隔的字符串。您只需在一端从阵列生成所需的格式,然后在另一端将格式解析为多个消息。