我还在做一个Node.js Discord bot,我想知道一些事情是否真的可能:
我有一个玩家列表,我在for循环中从其中随机选择一个,如下所示:
let players=['foo', 'bar'];
for (let round = 0; round < players.length; round++) {
let randPlayer = players[Math.floor(Math.random() * players.length)];
// Events
}
之后,我正在等待对使用discord.js收集器发送的消息的反应:
// Events
let msg = await message.channel.send('Message Here');
await msg.react('✔'); await msg.react('❌');
const filter = (reaction, user) => (user.id === randPlayer);
const ansCollector = await msg.createReactionCollector(filter, { time: 15000 });
await ansCollector.on('collect', async (reaction) => {
// Do something
});
问题是,收集器永远无法收集,因为for循环在“collect”事件被激发之前跳过到另一个播放器。
对于这个代码,你有其他的选择吗?
祝你有愉快的一天
将您的EventEmitter侦听器包装在每个播放器解析一次
的Promise中,并等待Promise。
for (let round = 0; round < players.length; round++) {
let randPlayer = players[Math.floor(Math.random() * players.length)];
await new Promise(resolve => ansCollector.once('collect', async (reaction) => {
resolve(reaction);
});
// Events
}