Javascript 在发送前保留for循环信息

Javascript 在发送前保留for循环信息,javascript,node.js,Javascript,Node.js,我正在使用discord.js制作一个机器人;主要功能运行良好,但我有一个遍历对象的for循环;我从该对象获取一些信息并将其发送到一个通道;问题是,它每次迭代都会发送一条消息,而且发送速度太快;我试过使用setInterval(),但不起作用;一个更好的解决方案是,如果我能在信息发送之前将其保留在某个地方;这是我的代码: var stat = [] var statNames = ['Speed', 'Special Defense', 'Special Attack', 'Defense',

我正在使用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条消息发送得太快,我可能会因此而受到速率限制。

如果您只想通过循环中的所有迭代发送一条包含组合字符串的消息,那么您可以在
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条单独的消息。