UnhandledPromiseRejectionWarning:TypeError [INVALID_TYPE]:提供的选项不是对象

时间:2020-04-26 20:51:14

标签: javascript promise discord.js

我正在使用Discord.JS制作一个discord机器人,但是当我尝试执行命令时,它向我显示此错误:

(node:4) UnhandledPromiseRejectionWarning: TypeError [INVALID_TYPE]: Supplied options is not an object. at Message.delete (/app/node_modules/discord.js/src/structures/Message.js:501:44) at /app/commands/warn.js:3:89.

warn.js代码为:

module.exports.run = async (bot, message, args) => {
    let target = message.mentions.members.first()
    if(!target) return message.channel.send("Couldn't find that ID!").then(m => m.delete(15000))

    let reason = args.slice(1).join(" ")
    if(!reason) return message.channel.send(`Please give a reason to warn **${target.user.tag}**!`).then(m => m.delete(15000))

    message.channel.send(`Warned **${target.user.tag}**!`).then(m => m.delete(15000))
    // get role by name
let myRole = message.guild.roles.cache.find(role => role.name === "Warned");
target.addRole(role).catch(console.error);

}

module.exports.help = {
    name: "warn",
    aliases: []
}

我真的不知道为什么会这样,而且我也找不到错误。 有人可以看一下代码,看看有什么问题吗?我会很感激。

2 个答案:

答案 0 :(得分:0)

delete函数需要一个对象作为其参数,您可以在其中指定超时。

    if(!reason) return message.channel.send(`Please give a reason to warn **${target.user.tag}**!`).then(m => m.delete({timeout: 15000}))

答案 1 :(得分:0)

在javascript中,有多种处理异步代码的方法。

在您的示例中,您使用的是@RunWith(XtextRunner) @InjectWith(CucumberInjectorProvider) class CucumberParsingTest { @Inject ParseHelper<Feature> parseHelper @Test def void loadModel() { val result = parseHelper.parse(''' Feature: The quick brown fox Jumps over The lazy dog ''') Assert.assertNotNull(result) val errors = result.eResource.errors Assert.assertTrue('''Unexpected errors: «errors.join(", ")»''', errors.isEmpty) } } 函数。这意味着您可以使用async/await-此功能基于语法糖在async之上构建。
它允许您以“同步”方式编写代码。 因此,您可能需要像这样重写Promise调用:

Promise

错误 module.exports.run = async (bot, message, args) => { let target = message.mentions.members.first() if(!target) { const message = await message.channel.send("Couldn't find that ID!"); return message.delete(15000) } 还会警告您Promise执行中存在错误。此处,给UnhandledPromiseRejectionWarning函数提供的参数类型错误。应该有一个对象,但是会收到一个数字。这是documentation of the message API

要更进一步,您可以使用delete链接功能处理Promises拒绝,这对于调试或记录错误很有用。

.catch

或使用异步/等待语法:

// Promises style
let target = message.mentions.members.first()

if(!target) {
  return message.channel.send("Couldn't find that ID!")
  .then(m => m.delete(15000))
  .catch(error => console.log(error))
}