我做了一个应该返回角色成员计数但返回“未定义”的函数。
这是我的代码:
const Discord = require('discord.js');
const client = new Discord.Client();
client.on('message', (message) => {
argument = message.content.split(' ');
switch (argument[0]) {
case 'showmember':
let membercount = (therole) => {
let role = message.guild.roles.cache.find(r => r.name === therole);
message.guild.members.fetch().then(fetched => {
let total = fetched.filter(m => m.roles.cache.some(r => r === role));
return total.length;
});
};
message.channel.send(membercount(argument.join(',').slice('showmember'.length)));
break;
}
}
这就是控制台(node:133436) UnhandledPromiseRejectionWarning: DiscordAPIError: Cannot send an empty message
答案 0 :(得分:2)
它返回“未定义”的原因是因为.fetch()是一个承诺,因此名为membercount
的函数不会立即返回值。实际上,membercount
甚至不返回任何值。您可以参考Return from a promise then()来了解原因。解决方案是将return total.length
替换为message.channel.send(total.length)
。
此外,我必须指出message.content.slice('showmember'.length)
将是一个空字符串。问题在于您的switch语句switch (message.content)
,因为您的case语句将寻找完全匹配的message.content === 'showmember'
。您要做的是检查message.content是否以'showmember'开头。我建议用if(message.content.startsWith('showmember')
或类似的逻辑替换您的switch-case语句。