在发送之前保留循环信息

时间:2016-12-25 08:48:43

标签: javascript node.js

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

1 个答案:

答案 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()获取另一端的数组。但是,如果需要,可以使用逗号分隔的字符串。您只需在一端从阵列生成所需的格式,然后在另一端将格式解析为多个消息。