Ожидание события, прежде чем 'для' l oop продолжается - PullRequest
0 голосов
/ 02 апреля 2020

Я все еще работаю над ботом Node.js Discord, и я хотел бы знать, возможно ли что-то на самом деле:

У меня есть список игроков, из которых я выбираю случайного игрока внутри для l oop, например:

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
});

Дело в том, что сборщик никогда не сможет собрать из-за пропуска l oop другому игроку до того, как будет запущено событие сбора.

У вас есть альтернативы этому коду?

Хорошего дня: D

1 Ответ

0 голосов
/ 02 апреля 2020

Оберните слушателя EventEmitter в обещание, которое разрешает once на игрока, и ожидайте обещание.

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
}
...