Ошибка типа: usert.addItem не является функцией - PullRequest
0 голосов
/ 24 января 2019

Попытка создать диск-бот, используя discord.js.Я использую sequelize и sqlite для создания базы данных для хранения данных.Кажется, что пользовательская функция не работает, терминал думает, что это не функция, когда она определена.Это может быть действительно очевидное решение, но я очень любитель, и я часто получаю ошибки, но обычно их исправляю.Этот, который я даже не могу определить корень проблемы

Эта проблема также относится к другим пользовательским функциям

Самым запутанным является то, что для другой папки для другого бота полностью, с оченьпохожий код и по сути те же пользовательские функции, это работает!Но по какой-то причине он здесь не работает.

// Defining these 
const { Users, ItemDB } = require('./dbObjects');



// The command that uses the function. It is worth noting that it finds the item and user successfully, proving that the problem is in users.addItem
const item = await ItemDB.findByPk(1);
const usert = Users.findByPk(message.author.id);
usert.addItem(item);

// The addItem function defined, in dbObjects file
Users.prototype.addItem = async function(item) {
const useritem = await UserItems.findOne({
    where: { user_id: this.user_id, item_id: item.id },
});

if (useritem) {
    useritem.amount += 1;
    return useritem.save();
}

return UserItems.create({ user_id: this.user_id, item_id: item.id, amount: 1 });
}; 

Ожидаемый результат успешно добавляется в базу данных, но вместо этого терминал возвращает:

(node:21400) UnhandledPromiseRejectionWarning: TypeError: usert.addItem is not a function

Добавление awaitдо Users.findByPk возвращается случайным образом.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Поскольку Users.findByPk(message.author.id) является обещанием, оно возвращает выполнение к следующему коду последовательности, поэтому переменная const usert еще не инициализирована, в результате чего usert.addItem() не является функцией.

Вам необходимо изменитьconst usert = Users.findByPk(message.author.id) для полной инициализации usert, тогда будет доступна функция addItem():

const usert = await Users.findByPk(message.author.id); 
0 голосов
/ 24 января 2019

Вам нужно await Users.findByPk(message.author.id);

const { Users, ItemDB } = require('./dbObjects');



// The command that uses the function. It is worth noting that it finds the item and user successfully, proving that the problem is in users.addItem
const item = await ItemDB.findByPk(1);
const usert = await Users.findByPk(message.author.id);
usert.addItem(item);

// The addItem function defined, in dbObjects file
Users.prototype.addItem = async function(item) {
const useritem = await UserItems.findOne({
    where: { user_id: this.user_id, item_id: item.id },
});

if (useritem) {
    useritem.amount += 1;
    return useritem.save();
}

return UserItems.create({ user_id: this.user_id, item_id: item.id, amount: 1 });


...