当前位置: 首页 > 知识库问答 >
问题:

未处理的promise拒绝重启命令

屈俊远
2023-03-14
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()处理的承诺。要在未处理的承诺拒绝时终止节点进程,请使用CLI标志--unhandled-rejections=strict(请参见https://nodejs.org/api/CLI.html#CLI_unhandled_rejections_mode)。(拒绝ID:1)(节点:6772)[DEP0018]拒绝警告:不推荐未处理得承诺拒绝.将来,未处理的承诺拒绝将以非零退出代码终止node.js进程。

共有1个答案

孟杰
2023-03-14

你对承诺有多熟悉?承诺可以是三种状态之一:

  • 挂起
  • 已完成
  • RejectedPending是指正在进行计算(例如尝试从数据库中提取某些内容)时,它既未完成也未被拒绝。
    已完成是指操作成功。例如,数据已提取。
    Rejected是指发生错误。操作失败。现在,回过头来看警告,它告诉您不推荐使用无提示未处理的承诺拒绝。在未来的节点版本中,这将导致您的程序崩溃。有两种处理承诺的方法。要么通过链接.然后链接到promise,要么通过使用异步await方法。
somePromise.then((data) => {
  console.log(data);
}).catch((err) => {
  console.error(err.message);
});

在这个例子中,我们是chaining.then().catch();敬诺言。如果承诺兑现了(意味着一切顺利),那么里面的操作将执行()。如果承诺被拒绝(意味着出了问题),将执行.catch()内部的操作。catch()将“捕获”错误。然后你就能按照你想要的方式来处理它。(此错误,打印到控制台等)

someFunction = async () => {
  try {
    const somePromise = await someAsyncOperation;
    console.log(somePromise);
  } catch (err) {
    console.log(err.message);
  }
};

这个示例看起来更像您的实际代码。通过将await包装在try...catch块中,我们可以执行与第一个示例相同的操作。通过使用catch(),JavaScript编译器可以显式地告诉您操作出了什么问题。(注意,我编写的最后一个示例包装在一个异步函数中。这是因为只允许在标记为async的函数中使用关键字await,而正常的.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上阅读关于这个非常酷的主题的更多信息

 类似资料:
  • 我想在Repl上为我的游戏实现一个基本的排行榜。它,所以我创建了一个节点。js后端。这是我在后端的配置: 但是每当我尝试发布时,我都会得到以下错误: (节点:344)未处理的PromisejectionWarning:TypeError:无法读取null的属性“push” (节点:344)UnhandledPromiseRejtionWarning:未处理的promise拒绝。这个错误要么是由于抛

  • 当我运行部署我的应用程序的命令时,我发现以下错误 (节点: 6292)UnhandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHan

  • 为了学习角度2,我正在尝试他们的教程。 我得到这样的错误: 我在SO中浏览了不同的问题和答案,但没有发现什么是“未处理的promise拒绝”。 有人能简单地解释一下它是什么,以及<code>错误:生成cmd ENOENT</code>是什么,当它出现时,我需要检查什么才能消除这个警告吗?

  • 本文介绍了单个promise组合器: 但我没有看到的是,一种运行所有promise的方法,但不是在个人promise被拒绝时短路。我如何确保所有的promise都得到履行,但我能处理拒绝和所有promise的解决?

  • 我得到这个错误- (节点:18420)未处理的PromisejectionWarning:TypeError:无法读取未定义的属性“name” (节点:18420)未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。要在未处理的promise拒绝时终止节点进程,请

  • 我正在构建一个SPFx angular 2组件,它有一个嵌套的子组件。子组件需要引用当前上下文,但如果我引用了: 我得到: SPComponentLoader.LoadComponent:错误:***无法从组件“FFAA6A0E-9EBA-40A0-BEC5-226D1DB53CAF”(RequirementsFormWebPart)加载入口点。defaultLoghandler.error@de