JS - 尽管 Catch 在这里,为什么它会抛出错误?

时间:2021-04-12 12:56:22

标签: javascript node.js

我正在编写一个 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 块的异步函数,但显然有一个捕获?

1 个答案:

答案 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
});