Estoy aprendiendo Javascript y tengo una sección sobre Promesas. Así que decidí probar y convertir algunos de mis proyectos anteriores para usar Promises. Pero no puedo entenderlo. Leí muchas guías y navegué por este sitio, pero todavía no puedo entender por qué esto no funciona.
Esta es la función con la que estoy trabajando, tratando de hacer una llamada a la base de datos que devuelve una promesa, que luego se puede registrar o lo que sea.
const getID = function (product) { let query = `select typeID from invTypes where UPPER(typeName) =UPPER('${product}')`; return new Promise((resolve, reject) => { resolve( DB.get(query, function (err, result) { if (err) { Bot.say(`Error looking up ${product}`); } else { console.log(result.typeID); //587 return result.typeID; } }) ); }); }; getID(product).then((data) => console.log(data)); //Database {}Las salidas de la consola
Database {} 587entonces .then(data => console.log(data)) //Base de datos {} todavía está sucediendo antes de que se devuelva la promesa,
como puede ver, el otro registro anterior dentro de la función en realidad está iniciando sesión después de él.
¿Puede alguien ayudarme con esto? He estado en esta función durante horas, jaja. Creo que tengo algún tipo de malentendido fundamental que no estoy captando en mis videos de bootcamp ni en nada de lo que estoy leyendo.
En el código de promesa, usa resolve() en la función de devolución de llamada de la función asíncrona para devolver valores.
const getID = function(product) { let query = `select typeID from invTypes where UPPER(typeName) =UPPER('${product}')`; return new Promise((resolve, reject) => { DB.get(query, function(err, result) { if (err) { Bot.say(`Error looking up ${product}`); reject(`Error looking up ${product}`); } else { console.log(result.typeID); //587 resolve(result.typeID); } }) }); };