Javascript discord.js-新添加的反应立即被移除

Javascript discord.js-新添加的反应立即被移除,javascript,discord,discord.js,Javascript,Discord,Discord.js,我正在使用discord.js版本12.3.1,并试图创建一个系统,在这个系统中,用户可以对消息做出反应并从中接收角色。当您单击时,这里的问题是guildMember.roles.remove(removeoles)返回一个。这意味着它不会同步执行,因此我们需要等待执行完成。 我们可以通过使用wait调用函数来实现这一点: const removoles=guildRoles.filter(role=>Object.values(colorRoles).filter(color=>color!=


我正在使用discord.js版本12.3.1,并试图创建一个系统,在这个系统中,用户可以对消息做出反应并从中接收角色。当您单击时,这里的问题是
guildMember.roles.remove(removeoles)
返回一个。这意味着它不会同步执行,因此我们需要等待执行完成。 我们可以通过使用
wait
调用函数来实现这一点:

const removoles=guildRoles.filter(role=>Object.values(colorRoles).filter(color=>color!==colorRoles[emojiName])。包括(role.name));
等待行会成员。角色。移除(移除角色);
//找到该颜色的角色名称,然后将其添加到GuildMember
const addRole=guildRoles.find(role=>role.name==colorRoles[emojiName]);
等待guildMember.roles.add(addRole);

我还改变了删除和添加的方式。

这解决了问题,但我不明白为什么。如果
removeoles
集合被验证不包括
addRole
角色,为什么需要等待
remove(removeoles)
add(addRole)
?谢谢你的帮助@Matt我查看了,发现roles.add函数实际上调用了roles.set函数。再加上add和remove函数都是异步的,那么remove函数的调用可能晚于add函数,该函数将角色设置为前一个角色减去要删除的角色。这就是为什么你会有这种奇怪的行为,需要用wait调用这些函数。我现在明白了,在这种情况下,在add/remove函数中内部调用
set()
,问题是
remove()
:将角色设置为前一个(例如管理员)+(蓝色)
remove()
:将角色设置为previous(例如admin)-(绿色、红色、黄色)。谢谢你检查代码和所有的帮助,我很感激。