为什么在运行代码时出现错误“ UnhandledPromiseRejectionWarning”?

时间:2019-04-17 19:47:24

标签: javascript node.js discord discord.js

我正在尝试使用node.js discord模块制作一个机器人,当在discord中输入命令时,该机器人将向用户发送私人消息。该命令应该像

一样使用

!rp <@收件人>

,邮件即被发送给收件人。

我的代码是:

else if (rhysmessage.substring(0,4) == ("!rp ")) {
e.message.delete();
var end
var charactercheck
for (end=0; charactercheck < rhysmessage.length; charactercheck = 
charactercheck + 1) {
  console.log(rhysmessage.charAt(charactercheck))
  if (rhysmessage.charAt(charactercheck) == " ") {
    end = charactercheck}
}
if (end == 0){
  rhyschannel.sendMessage("Please use format `!rp <recipient> 
<message>`")
}
else {
  usersendto = rhysmessage.substring(5,end-1)   
usersendto.sendMessage(rhysmessage.substring(end+1,rhysmessage.leng
th)
    }
   }

运行此代码时,出现错误:“ UnhandledPromiseRejectionWarning”。为什么会这样?

1 个答案:

答案 0 :(得分:1)

有关未处理的承诺拒绝的信息,请参见here

说明:
某些方法(即Discord.js中的send())返回promises。引用自MDN ...

  

Promise对象表示异步操作的最终完成(或失败)及其结果值。

换句话说,某些功能必须等待某些事情完成。当出现错误时,承诺将被拒绝,您必须进行处理。您看到的警告是由于您的代码没有捕获任何被拒绝的承诺而导致的。

解决方案:
实现使用.catch()方法或try...catch语句来处理任何错误。

await channel.send('hey')
.catch(err => console.error(err));
try {
  await channel.send('hey');
  await user.send('hey again');
} catch(err) {
  console.error(err);
}

请注意,尽管在上面的示例中错误将被发送到控制台,但不会停止您的代码。确保正确处理它,以免任何其他代码都不会出错。另外,要使用await,您必须处于异步函数之内。

// sendMessage()在Discord.js中已弃用。请改用send()