Javascript 在'之前等待事件;对于';循环继续

Javascript 在'之前等待事件;对于';循环继续,javascript,node.js,loops,events,discord.js,Javascript,Node.js,Loops,Events,Discord.js,我仍在开发Node.js Discord机器人,我想知道是否真的有可能: 我有一个玩家列表,在for循环中随机选择一个,如下所示: let players=['foo','bar']; 对于(让轮数=0;轮数(user.id==randPlayer); const ansCollector=await msg.createReactionCollector(过滤器,{time:15000}); 等待ansCollector.on('collect',异步(反应)=>{ //做点什么 }); 问

我仍在开发Node.js Discord机器人,我想知道是否真的有可能:

我有一个玩家列表,在for循环中随机选择一个,如下所示:

let players=['foo','bar'];
对于(让轮数=0;轮数
之后,我正在等待对使用Discord.js的收集器发送的消息的反应:

//事件
let msg=wait message.channel.send('message Here');
等待消息。反应('✔'); 等待消息。反应('❌');
常量过滤器=(反应,用户)=>(user.id==randPlayer);
const ansCollector=await msg.createReactionCollector(过滤器,{time:15000});
等待ansCollector.on('collect',异步(反应)=>{
//做点什么
});
问题是,收集器永远无法收集,因为for循环在“collect”事件触发之前跳转到另一个播放器

这个代码有没有其他的选择


祝你有一个愉快的一天:D

将你的EventEmitter侦听器包装在一个承诺中,该承诺将为每位玩家解决一次
,并等待承诺的实现

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
}
for(让round=0;roundansCollector.once('collect',async(reaction)=>{
决心(反应);
});
//事件
}

在CB中获得
msg.createReactionCollector
响应后,为什么不移动过滤器代码