Node Discord js sequelize findOne() renvoie une valeur étrange

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour

Je programme une base de donnée à l’aide de sequelize sur Discord js, sur un bot donc.

Tout fonctionne bien, de la création de la bdd jusqu’à l’interrogation des findAll, etc. Mais là, je rencontre un souci bien particulier autour duquel je n’arrive pas à trouver une logique.

Il y a donc, dans la bdd, une table contenant des user_id et des item_id et des amount.

module.exports = (sequelize, DataTypes) => {
    return sequelize.define('user_item', {
        user_id: DataTypes.STRING,
        item_id: DataTypes.STRING,
        amount: {
            type: DataTypes.INTEGER,
            allowNull: false,
            'default': 0,
        },
    }, {
        timestamps: false,
    });
};

Je parviens tout à fait à ajouter des items pour chaque utilisateur, à les appeler dans leur globalité.

Mais là, j’ai besoin d’en appeler un particulier via une commande, de type "utiliser cet objet".

J’ai donc ce code :

    } else if (command === 'use') {

        const user = await UserItems.findOne({ where: { user_id: message.author.id } });
        const item = commandArgs;
        const itemfound = UserItems.findOne({where: { user_id: message.author.id , item_id: item, amount: !0 }});
        return message.reply (`debug ${itemfound}`);

Mais il me répond toujours par un [Object Promise], là où je veux qu’il me dise si oui ou non l’objet existe dans la database, afin de pouvoir le modifier. Sans doute la commande est-elle mal utilisée, mais… quelqu’un aurait-il la solution ?

Édité par Raka

+0 -0

Tu ne sais pas ce qu’est une promesse ?
Je ne t’accuse pas de n’avoir aucune parole ! C’est un concepts informatique !

Plus d’information sur la MDN. On a même un tutoriel pour bien t’expliquer ça: Les promesses en JavaScript

L’idée, c’est que faire une requête SQL, c’est long. Du coup on ne là fait pas sur le fils d’exécution principal. Et elle est donc faite à un autre moment par le moteur JS.

Je peux te conseiller cette vidéo: What the heck is the event loop anyway? pour bien comprendre le pourquoi et le comment.

Bref, tout ça pour dire que le plus simple est d’utiliser await devant ta promesse pour la résoudre et obtenir le résultat final.


        const itemfound = await UserItems.findOne({where: { user_id: message.author.id , item_id: item, amount: !0 }});
        return message.reply (`debug ${itemfound}`);

Édité par ache

ache.one                 🦹         👾                                🦊

+1 -0

C’est tout à fait normal !

Je te souhaite bon courage dans ton apprentissage. :)

ache.one                 🦹         👾                                🦊

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte