Javascript 在发送前保留for循环信息
我正在使用discord.js制作一个机器人;主要功能运行良好,但我有一个遍历对象的for循环;我从该对象获取一些信息并将其发送到一个通道;问题是,它每次迭代都会发送一条消息,而且发送速度太快;我试过使用Javascript 在发送前保留for循环信息,javascript,node.js,Javascript,Node.js,我正在使用discord.js制作一个机器人;主要功能运行良好,但我有一个遍历对象的for循环;我从该对象获取一些信息并将其发送到一个通道;问题是,它每次迭代都会发送一条消息,而且发送速度太快;我试过使用setInterval(),但不起作用;一个更好的解决方案是,如果我能在信息发送之前将其保留在某个地方;这是我的代码: var stat = [] var statNames = ['Speed', 'Special Defense', 'Special Attack', 'Defense',
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条消息发送得太快,我可能会因此而受到速率限制。如果您只想通过循环中的所有迭代发送一条包含组合字符串的消息,那么您可以在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()
返回数组。但是,如果需要,可以使用逗号分隔的字符串。您只需从一端的数组中生成所需的格式,然后在另一端将格式解析回多条消息。什么是“发送前保留信息”?如果需要,您可以轻松地在for
循环中构建一个对象数组,但我不明白您想要的输出是什么。@jfriend00我想说的是,每次循环运行时,它都会将消息发送到机器人所在的通道;我只是不想限制速率,因为循环运行,它会立即发送消息;我说“保留信息”就像“保留消息直到循环结束,然后只发送一条消息”,而不是6条单独的消息。