Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2020-09-24T13:12:05+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Node Discord js sequelize findOne() renvoie une valeur étrange, message #2263612020-09-24T13:12:05+02:00ache/@achehttps://zestedesavoir.com/forums/sujet/14554/node-discord-js-sequelize-findone-renvoie-une-valeur-etrange/?page=1#p226361<p>C’est tout à fait normal !</p>
<p>Je te souhaite bon courage dans ton apprentissage. <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"> </p>Node Discord js sequelize findOne() renvoie une valeur étrange, message #2263602020-09-24T13:04:23+02:00Raka/@Rakahttps://zestedesavoir.com/forums/sujet/14554/node-discord-js-sequelize-findone-renvoie-une-valeur-etrange/?page=1#p226360<p>J’ai commencé à apprendre JS y a une semaine, je pense que je progresse bien, mais y a des lacunes <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"></p>
<p>Merci, je vais aller voir ça !</p>Node Discord js sequelize findOne() renvoie une valeur étrange, message #2263592020-09-24T12:52:24+02:00ache/@achehttps://zestedesavoir.com/forums/sujet/14554/node-discord-js-sequelize-findone-renvoie-une-valeur-etrange/?page=1#p226359<p>Tu ne sais pas ce qu’est une promesse ?<br>
Je ne t’accuse pas de n’avoir aucune parole ! C’est un concepts informatique !</p>
<p>Plus d’information sur la <a href="https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise">MDN</a>. On a même un tutoriel pour bien t’expliquer ça: <a href="https://zestedesavoir.com/tutoriels/446/les-promesses-en-javascript/">Les promesses en JavaScript</a></p>
<p>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.</p>
<p>Je peux te conseiller cette vidéo: <a href="https://www.youtube.com/watch?v=8aGhZQkoFbQ">What the heck is the event loop anyway?</a> pour bien comprendre le pourquoi et le comment.</p>
<p>Bref, tout ça pour dire que le plus simple est d’utiliser <code>await</code> devant ta promesse pour la résoudre et obtenir le résultat final.</p>
<div class="hljs-code-div hljs-code-js"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span></div><pre><code class="hljs language-js">
<span class="hljs-keyword">const</span> itemfound = <span class="hljs-keyword">await</span> UserItems.findOne({<span class="hljs-attr">where</span>: { <span class="hljs-attr">user_id</span>: message.author.id , <span class="hljs-attr">item_id</span>: item, <span class="hljs-attr">amount</span>: !<span class="hljs-number">0</span> }});
<span class="hljs-keyword">return</span> message.reply (<span class="hljs-string">`debug <span class="hljs-subst">${itemfound}</span>`</span>);
</code></pre></div>Node Discord js sequelize findOne() renvoie une valeur étrange, message #2263572020-09-24T12:26:24+02:00Raka/@Rakahttps://zestedesavoir.com/forums/sujet/14554/node-discord-js-sequelize-findone-renvoie-une-valeur-etrange/?page=1#p226357<p>Bonjour</p>
<p>Je programme une base de donnée à l’aide de sequelize sur Discord js, sur un bot donc.</p>
<p>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.</p>
<p>Il y a donc, dans la bdd, une table contenant des user_id et des item_id et des amount.</p>
<div class="hljs-code-div hljs-code-js"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span></div><pre><code class="hljs language-js"><span class="hljs-built_in">module</span>.exports = <span class="hljs-function">(<span class="hljs-params">sequelize, DataTypes</span>) =></span> {
<span class="hljs-keyword">return</span> sequelize.define(<span class="hljs-string">'user_item'</span>, {
<span class="hljs-attr">user_id</span>: DataTypes.STRING,
<span class="hljs-attr">item_id</span>: DataTypes.STRING,
<span class="hljs-attr">amount</span>: {
<span class="hljs-attr">type</span>: DataTypes.INTEGER,
<span class="hljs-attr">allowNull</span>: <span class="hljs-literal">false</span>,
<span class="hljs-string">'default'</span>: <span class="hljs-number">0</span>,
},
}, {
<span class="hljs-attr">timestamps</span>: <span class="hljs-literal">false</span>,
});
};
</code></pre></div>
<p>Je parviens tout à fait à ajouter des items pour chaque utilisateur, à les appeler dans leur globalité.</p>
<p>Mais là, j’ai besoin d’en appeler un particulier via une commande, de type "utiliser cet objet".</p>
<p>J’ai donc ce code :</p>
<div class="hljs-code-div hljs-code-js"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span></div><pre><code class="hljs language-js"> } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (command === <span class="hljs-string">'use'</span>) {
<span class="hljs-keyword">const</span> user = <span class="hljs-keyword">await</span> UserItems.findOne({ <span class="hljs-attr">where</span>: { <span class="hljs-attr">user_id</span>: message.author.id } });
<span class="hljs-keyword">const</span> item = commandArgs;
<span class="hljs-keyword">const</span> itemfound = UserItems.findOne({<span class="hljs-attr">where</span>: { <span class="hljs-attr">user_id</span>: message.author.id , <span class="hljs-attr">item_id</span>: item, <span class="hljs-attr">amount</span>: !<span class="hljs-number">0</span> }});
<span class="hljs-keyword">return</span> message.reply (<span class="hljs-string">`debug <span class="hljs-subst">${itemfound}</span>`</span>);
</code></pre></div>
<p>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 ?</p>