为啥按名称查找我的角色返回未定义?
Posted
技术标签:
【中文标题】为啥按名称查找我的角色返回未定义?【英文标题】:Why does finding my role by name return undefined?为什么按名称查找我的角色返回未定义? 【发布时间】:2021-01-12 02:33:22 【问题描述】:Gang.findOne(leaderUserID: message.author.id, leaderUserName: message.member.user.tag, serverID: message.guild.id, (err, gang) =>
if(err) console.log(err);
let embed = new Discord.MessageEmbed()
.setTitle("Gang")
.setColor("4000FF")
.setThumbnail(message.author.displayAvatarURL)
gangName = message.content.substring(message.content.indexOf(" ") + 1, message.content.length);
if(!gang)
const newGang = new Gang(
leaderUserID: message.author.id,
leaderUserName: message.member.user.tag,
serverID: message.guild.id,
gangName: gangName,
points: "1"
);
guild.roles.create(
data:
name: gangName,
color: `GREY`
,
reason: `Gang created by $message.member.user.tag at $message.timestamp`
);
let role = message.guild.roles.cache.find(guild => guild.name === gangName);
console.log(`role = $role`);
member.roles.add(role);
newGang.save().catch(err => console.log(err));
embed.addField("Gang Creation", "-15 points", true);
embed.addField("Gang Name", gangName, true);
message.channel.send(embed);
return;
除了分配角色外,一切正常。我将帮派名称设置为命令的第二部分,我使用该名称创建角色,我将角色设置为
let role = message.guild.roles.cache.find(guild => guild.name === gangName);
但随后,角色的 console.log 显示“未定义”。
它是如何未定义的?我刚刚创建了角色,然后搜索了它。
【问题讨论】:
guild.roles.create 是一个异步函数,它返回一个承诺 (developer.mozilla.org/en-US/docs/Web/javascript/Reference/…)。您需要在角色创建完成之前等待该承诺。 @KurtThiemann 那么,我可以让角色 = message.guild... 进入角色创建吗? @KurtThiemann 或者我会在上面扔一个.then(let role = message.guild.roles.cache.find(guild => guild.name === gangName))
【参考方案1】:
guild.roles.create 是一个异步函数,因此您可以使用await
let role = await guild.roles.create(
data:
name: gangName,
color: `GREY`
,
reason: `Gang created by $message.member.user.tag at $message.timestamp`
);
console.log(`role = $role`);
member.roles.add(role);
【讨论】:
以上是关于为啥按名称查找我的角色返回未定义?的主要内容,如果未能解决你的问题,请参考以下文章