Estoy usando mangosta para obtener un documento existente que contiene un campo numérico llamado "huevos". Puedo obtener el documento e imprimir el número en la consola. Sin embargo, cuando se asigna a una variable y se inserta en una inserción, se muestra como indefinida.
client.on('messageCreate', message => { if(message.content.toLowerCase() === "~inv" && message.author.tag === "<discord tag>") sendInventory(message.author.id, message.author.tag, message.channelId); ... } async function sendInventory(id, authorTag ,msgChannelID){ let eggPromise = await getData(id); let numEggs = await Promise.resolve(eggPromise).then(function(value){return value;}); let queryDesc = 'You haven't collected any eggs!'; try{ queryDesc = authorTag + ': ' + 'You have ' + console.log(numEggs) +' eggs!' } catch(err){} const embedLeaderboard = new MessageEmbed() .setColor('#624aa1') .setDescription(queryDesc); client.channels.cache.get(msgChannelID).send({embeds[embedLeaderboard]}).catch(console.error); } function getData(id){ User.findOne({discordId: id}, function(err, doc){ if(err){console.log('query error');} else{ console.log('eggs: '+doc.eggs); return doc.eggs; } }); }Probé diferentes métodos para resolver la promesa devuelta por getData() pero parece que estoy cometiendo un simple error. Cualquier ayuda es apreciada. ¡Gracias!
parece que olvidó devolver la promesa de la función getData, esto debería funcionar:
function getData(id) { // User.findOne is a promise, you should return it return User.findOne({ discordId: id }).then(doc => doc.eggs); // using promises }Promesas + Mangosta: https://mongoosejs.com/docs/promises.html
Tienes que await el .findOne
function getData(id){ await User.findOne({discordId: id}, function(err, doc){ if(err){console.log('query error');} else{ console.log('eggs: '+doc.eggs); return doc.eggs; } }); }