猿问

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

我仍在研究 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 的收集器对发送的消息做出反应:


// 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 循环会跳到另一个玩家。


你有这个代码的替代品吗?


祝你有美好的一天 :D


萧十郎
浏览 67回答 1
1回答

森林海

将您的 EventEmitter 侦听器包装在once每个玩家解析的 Promise 中,并等待承诺。for (let round = 0; round < players.length; round++) {&nbsp; &nbsp; let randPlayer = players[Math.floor(Math.random() * players.length)];&nbsp; &nbsp; await new Promise(resolve => ansCollector.once('collect', async (reaction) => {&nbsp; &nbsp; &nbsp; &nbsp; resolve(reaction);&nbsp; &nbsp; });&nbsp; &nbsp; // Events}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答