在 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 块