【发布时间】:2021-07-23 02:43:24
【问题描述】:
我正在尝试在等待客户回复的循环中实现一个函数。
客户端回复后才进入下一次迭代,正好运行3次。
我遇到的问题是,无论何时运行该函数,它都会执行所有三个“承诺”,而无需等待前一个先完成。
我将如何解决这个问题?谢谢。
module.exports = {
name: 'tournamentwinners',
description: 'Prepare a pretty message to showcase last tournament\'s winners',
aliases: ['trwin', 'tournwin'],
execute(client, message, args) {
const teamSize = args[0].toLowerCase();
const firstPlaceTeamMembers = new Array(teamSize);
const secondPlaceTeamMembers = new Array(teamSize);
const thirdPlaceTeamMembers = new Array(teamSize);
const filter = m => m.author.id === message.author.id;
for (let i = 0; i < 3; i++) {
message.channel.send(`Which team finished in #${i + 1}? (tag all ${teamSize} people)`).then(() => {
message.channel.awaitMessages(filter, {
max: 1,
time: 30000,
errors: ['time'],
})
.then(msg => {
msg = msg.first();
const members = msg.mentions.members.values();
for(let j = 0; members.hasNext(); j++) {
if(i == 0) {
firstPlaceTeamMembers[j] = members.next().value;
} else if(i == 1) {
secondPlaceTeamMembers[j] = members.next().value;
} else {
thirdPlaceTeamMembers[j] = members.next().value;
}
}
})
.catch(collected => {
message.channel.send('Something messed up...');
});
});
}
},
};
【问题讨论】:
-
是否期望每个团队的成员数量相同(所以
teamSize只能通过命令确定)? -
@PerplexingParadox 是的。所有团队成员数量相同,通过命令确定。
-
我建议你考虑使用
MessageCollector。
标签: javascript loops asynchronous promise discord.js