Как я могу исправить ошибку Discord Bot Keyv [обещание объекта]?

#discord.js #key-value #keyv

#discord.js #ключ-значение #keyv

Вопрос:

Я вроде как новичок в 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
 

Кто-нибудь, пожалуйста, может мне помочь?

Комментарии:

1. Надеюсь, мой код не слишком запутанный, я не настолько хорош в организации кода.

Ответ №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.`
 );
});
 

Руководства по пониманию обещаний:

Комментарии:

1. Большое вам спасибо, это было очень полезно. Я просто хотел спросить, есть ли способ фактически прочитать значение вместо true / undefined Также что такое шаблонные литералы?

2. Это литералы шаблона . Вы можете получить только то, что указано в разрешенном обещании, я бы проверил keyv документы, чтобы узнать больше об этом. Вы также можете просто использовать prevvalue вместо currentval