我在此消息下方提供的代码有效。但是,当我关闭DM时,它会同时发送could not be DMed!
和Sent a message
这两个消息。如果消息已发送,我怎么可能让机器人发送一条消息?
message.author.send("hi").catch(() => message.channel.send("could not be DMed!")).then(() => message.channel.send(`Sent a message`));
答案 0 :(得分:2)
关闭dm时似乎会出现某种错误,请尝试使用async await语法查看关闭dm并从那里开始时弹出的错误
(
async () => {
try {
const response = await message.channel.send('sent a message')
console.log(response)
} catch(err) {
console.log(err)
await message.channel.send("could not be DMed!")
}
}
)()
答案 1 :(得分:2)
只需颠倒.then()
和.catch()
的顺序。如果您在.then()
之后附加.catch()
,它将像“最终”一样运行-即,只要渔获量返回的诺言不拒绝它运行。
message.author.send("hi")
.then(() => message.channel.send(`Sent a message`))
.catch(() => message.channel.send("could not be DMed!"));
如果您希望.catch()
仅在原始承诺被拒绝时运行,而在.then()
承诺被拒绝时也可以运行,则可以使用第二个参数来.then()
:
message.author.send("hi")
.then(() => message.channel.send(`Sent a message`), () => message.channel.send("could not be DMed!"))