discord.js/node.js: Problem bei Übergabe der user_id?
Hallo,
ich schreibe grad ein bisschen an meinem Discord-Bot.
Der Code für den Inventory-Command sieht so aus:
else if (commandName === 'inventory') {
const target = interaction.options.getUser('user') ?? interaction.user;
const user = await Users.findOne({ where: { user_id: target.id } });
const items = await user.getItems();
Beim Ausführen wird folgender Fehler geworfen:
Error: WHERE parameter "user_id" has invalid "undefined" value
Der Ursprung liegt am user.getItems();
Die Property getItems() ist wie folgt definiert:
Reflect.defineProperty(Users.prototype, 'getItems', {
value: () => {
return UserItems.findAll({
where: { user_id: this.user_id },
include: ['item'],
});
},
});
Warum denkt er, das "this.user_id" undefined ist?
Wenn ich im Hauptprogramm die Zeile
console.log(user.user_id);
einfüge, gibt er mir die richtige ID aus. Mach ich beim Aufruf der getItems-Property irgendwas falsch?
Danke schonmal :)
1 Antwort
Dein Lambda:
() => {
/* ... */
}
nimmt den Wert this.user_id aus dem aktuellen Kontext, in dem es definiert wird.
Dazu ein kleines Beispiel:
function SomePrototype() {
this.someProperty = 123;
}
function defineSomeMethod() {
this.someProperty = 456;
Object.defineProperty(SomePrototype.prototype, 'someMethod', {
value: () => {
return this.someProperty;
}
});
}
const someObject = new SomePrototype();
defineSomeMethod();
const result = someObject.someMethod();
console.log(result); // 456
Wenn ich das Property in defineSomeMethod weglassen würde, wäre das Ergebnis so wie bei dir undefined.
Du möchtest allerdings den Zustand deines Objekts (user, bzw. in meinem Beispiel someObject). Ersetze also den Lambda-Ausdruck gegen eine Funktion:
value: function() {
return this.someProperty;
}