javascript - 未处理的承诺拒绝 | 重启命令
问题描述
const { MessageEmbed, Guild } = require("discord.js");
const db = require('quick.db');
module.exports = {
config: {
name: "restart",
category: "moderation",
aliases: ["r"],
description: "restarts the bot",
accessableby: "Administrator",
usage: "restart",
},
run: async (bot, message, args) => {
if (!message.author.id === '556247341838106624' ) {
return message.channel.send(`you cant use this!`)
}
await message.guild.channels.cache.find(channel => channel.name === "restart").id
process.exit();
}
}
错误:
(节点:6772)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志
--unhandled-rejections=strict
(请参阅https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。(拒绝 id:1)(节点:6772)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
解决方案
你对承诺有多熟悉?承诺可以处于以下三种状态之一:
- 待办的
- 已完成
- Rejected
Pending是在进行计算时(假设您尝试从数据库中获取某些内容)它既不满足也不拒绝。
Fulfilled是操作是否成功。例如,数据被提取。
拒绝是如果出现问题。操作失败。
现在,回顾一下这个警告,它告诉你,默默地未处理的 Promise 拒绝被弃用了。在未来的节点版本中,这将导致您的程序崩溃。
有两种处理 Promise 的方法。通过将 .then 链接到 Promise 或使用异步等待方法。
先看 .then 方法:
somePromise.then((data) => {
console.log(data);
}).catch((err) => {
console.error(err.message);
});
在这个例子中,我们链接了 .then().catch(); 到承诺。如果 promise 被实现(意味着一切顺利), .then() 内部的操作将被执行。如果 promise 被拒绝(意味着出现问题),将执行 .catch() 内部的操作。catch() 将“捕获”错误。然后,您就可以按照您希望的方式处理它。(Thow 错误,打印到控制台等)
异步等待
someFunction = async () => {
try {
const somePromise = await someAsyncOperation;
console.log(somePromise);
} catch (err) {
console.log(err.message);
}
};
此示例看起来更像您的实际代码。通过将 await 包装在 try...catch 块中,我们可以执行与第一个示例相同的操作。通过使用 catch(),JavaScript 编译器可以明确地告诉您操作出了什么问题。
(注意我写了最后一个例子,包裹在 async 函数中。这是因为关键字 await 只允许在标记为 async 的函数内部使用,而普通的 .then() 链可以在任何一个函数中使用。)
回答你的问题
您现在应该能够弄清楚您收到警告的原因:
await message.guild.channels.cache.find(channel => channel.name === "restart").id
如果找不到,JavaScript 很乐意告诉您原因。因此,在这种情况下,您必须将其包装在 try..catch 块中(或改用常规的 Promise 语法。)您可以在https://developer.mozilla.org/en-
阅读有关这个非常酷的主题的更多信息US/docs/Web/JavaScript/Reference/Global_Objects/Promise
推荐阅读
- c++ - 当程序以root身份运行时在运行时切换用户
- android - 无法使用改造从多个按钮上传多个图像
- python - 什么是 ValueError:要解包的值太多(预期为 2)?
- javascript - 如何使用 requestAnimationFrame() 移动多个元素,而无需为每个元素创建新函数
- php - QuickBooks 桌面 PHP 销售订单 API
- r - 基于条件的有效观察
- r - 如何从 GenomicRanges 对象中获取不同/唯一的行
- html - 需要选择第一个孩子
- swift - 在 Vapor 中等待异步任务完成请求
- python-3.x - 如何避免在eclipse python中导入错误的self