【问题标题】:How can I fix Discord Bot Keyv [Object Promise] error?如何修复 Discord Bot Keyv [Object Promise] 错误?
【发布时间】:2021-03-12 13:14:09
【问题描述】:

我对 discord.js 有点陌生,我正在为冬季构建一个机器人。我正在构建一个名为!gift 的功能,它可以让你以虚拟方式向人们赠送东西。 (不是用钱或任何东西)。我正在使用 Keyv 来存储每个用户到目前为止收到了多少礼物。这是我的代码-

client.on('message', message => {
  const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
  const command = args.shift().toLowerCase();
  if (command === 'gift') {
    let sender = message.author.username;
    let receiver = message.mentions.users.first();
    let [sender1, gift] = args;
    if (keyv.get(receiver) === undefined) {
      keyv.set(receiver, giftcount);
    }
    let prevvalue = keyv.get(receiver).then(prevvalue => {
      return;
    
    });
    
   let currentval = keyv.set(receiver, prevvalue+=1).then(currentval => {
      return;
    });
   

    }; 
    //message.channel.send(currentval);
    message.channel.send(sender + ' has gifted ' + receiver + ' ' + gift + '! They have ' +  currentval + ' gifts right now.');

  
});

在我添加.then()之前,它发送消息时说

They have [object Promise] gifts right now.

我的朋友建议我添加.then() 来解决这个问题,我做到了,但我不知道该放在哪里,他也不知道。

当我运行上面的代码时,我得到以下错误 -

ReferenceError: currentval is not defined

有人可以帮帮我吗?

【问题讨论】:

  • 我希望我的代码不要太乱,我不擅长组织代码。

标签: discord.js key-value keyv


【解决方案1】:

[object Promise] 不是错误;它是待处理承诺的字符串形式。你的朋友是对的,你需要使用Promise#then(),并使用该函数中提供的变量。

另外,使用模板文字来提高可读性。

keyv.set(receiver, (prevvalue += 1)).then((currentval) => {
 // message.channel.send(currentval);
 message.channel.send(
  `${sender} has gifted ${receiver} ${gift}! They have ${currentval} gifts right now.`
 );
});

promise 理解指南:

【讨论】:

  • 非常感谢,这很有帮助。我只是想问是否有办法实际读取值而不是 true / undefined 还有什么是模板文字?
  • These are template literals。您只能获得已解决的承诺中提供的任何内容,我会查看keyv 文档以了解更多信息。您也可以只使用prevvalue 而不是currentval
猜你喜欢
  • 2021-10-14
  • 2020-06-25
  • 1970-01-01
  • 2022-11-06
  • 2020-09-07
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 2019-07-06
相关资源
最近更新 更多