我正在编写一个 Discord Bot,用于检查用户是否在我的 Discord 服务器上以及他是否具有特定角色。但是,如果尽管使用了 catch,但用户不在我的 Discord 上,我会收到一条错误消息。 我有以下代码:
app.post('/', (req, res) => {
const userId = req.rawBody;
try {
bot.guilds.fetch(guildId).then(guild => {
guild.members.fetch(userId).then(user => {
if (user.id == userId) {
if (user.roles.cache.has('830811473604902912'))
{
console.log('User has RoleX.');
}
} else{
// Member invalid
console.log('User is not on Discord.');
res.send('False');
}
});
});
}
catch
{
// Member not found or other error encountered
console.log('User is not on Discord.');
res.send('False');
}
});
现在错误信息是:
<块引用>(节点:15184)未处理的PromiseRejectionWarning:DiscordAPIError:未知成员
在 RequestHandler.execute (c:\Users\User\Desktop\DiscordBot\MyBot\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
在 processTicksAndRejections (internal/process/task_queues.js:93:5)
在异步 RequestHandler.push (c:\Users\User\Desktop\DiscordBot\MyBot\node_modules\discord.js\src\rest\RequestHandler.js:39:14)
(使用 node --trace-warnings ...
显示警告的创建位置)
(node:15184) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误要么是因为在没有 catch 块的情况下抛出了异步函数,要么是因为拒绝了一个没有用 .catch() 处理过的承诺。要在未处理的承诺拒绝时终止节点进程,请使用 CLI 标志 --unhandled-rejections=strict
(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝编号:1)
(node:15184) [DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止 Node.js 进程。
它说我有一个没有 catch 块的异步函数,但显然有一个捕获?
答案 0 :(得分:1)
你有一个 catch 块,但不是在实际的承诺上。更改为:
bot.guilds.fetch(guildId).then(guild => {
return guild.members.fetch(userId).then(user => {
if (user.id == userId) {
if (user.roles.cache.has('830811473604902912'))
{
console.log('User has RoleX.');
}
} else{
// Member invalid
console.log('User is not on Discord.');
res.send('False');
}
});
})
.catch((e) => {
// Handle error here
});