为了账号安全,请及时绑定邮箱和手机立即绑定

在“for”循环继续之前等待事件

在“for”循环继续之前等待事件

萧十郎 2022-06-09 19:04:32
我仍在研究 Node.js Discord 机器人,我想知道是否真的有可能:我有一个玩家列表,我在 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 的收集器对发送的消息做出反应:// Eventslet 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 循环会跳到另一个玩家。你有这个代码的替代品吗?祝你有美好的一天 :D
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

将您的 EventEmitter 侦听器包装在once每个玩家解析的 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

}


查看完整回答
反对 回复 2022-06-09
  • 1 回答
  • 0 关注
  • 66 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信