#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