在 Promise 之后收到除 catch 块之外的警告

Posted

技术标签:

【中文标题】在 Promise 之后收到除 catch 块之外的警告【英文标题】:Getting warning except catch block after a Promise 【发布时间】:2020-11-21 04:47:10 【问题描述】:

我正在编写一个 discord.js 机器人,需要一个第一个参数是 Message-ID 的命令。 因为一个fetch()返回了一个promise,所以不能保证消息一定会被找到(很明显如果ID错误),所以只有找到了消息,才会进入.then(),如果没有,我就做@987654324 @

但是,我仍然在控制台中收到警告UnhandledPromiseRejectionWarning: DiscordAPIError: Unknown Message 但是,如果我将 catch 块更改为.catch(console.error),警告就会消失,我会得到一个对象类型的输出。但我不希望这个错误会显示在我的控制台中,我也不想要这些警告。我的机器人应该只删除该消息,因为输入无效 ID 是用户的错。

还有一个问题:catch 块何时触发,如果 ID (args[0]) 本身有效(18 个字符且只有数字)但仍不匹配任何消息,或者它是否只是导致Promise 中的错误。

提前致谢!

这里还有一点代码:

msg.channel.messages.fetch(args[0])
                .then(message => 
                    console.log("then");
                )
                .catch(console.log("catch"));

真正有趣的是,如果我的 ID 有效,那么它会先显示“catch”,然后是“then”。如果它无效,它会说“catch”,然后是警告消息

【问题讨论】:

你可能指的是.catch(msg.delete)而不是.catch(msg.delete()) @feedy 只编辑了 4you 什么是真正有趣的 [...]”– 与我在评论中已经暗示的原因相同。 ***.com/questions/6589497/… 我已经找到问题了,我忘记在我的 catch 块中有一个参数 (: 【参考方案1】:

试试.catch((err) => console.log(err); msg.delete(); );

【讨论】:

以上是关于在 Promise 之后收到除 catch 块之外的警告的主要内容,如果未能解决你的问题,请参考以下文章

将 catch 块添加到 Promise 会返回待处理而不是被拒绝

对不同类型的两个 Promise 使用相同的 then/catch/finally 块

在 mongodb 连接 url 中将“useNewUrlParser”和“useUnifiedTopology”设置为 true,避免了 promise 函数中的 catch 块

Promise Catch 在 json rpc 调用中未收到错误

为啥在 Try ... Catch 中使用 finally

使用块读取大型csv文件时如何在连接块之前处理除一列之外的所有列