Tengo este fragmento de código que estoy escribiendo en node.js y tengo un problema.
async function CheckearWhitelist(id) { const oracheck = ora("Checkeando en la whitelist...").start(); con.connect(function (err) { if (err) { oracheck.fail( "Ha habido un fallo al conectarse a MySQL - Comprueba la conexión" ); } con.query( `SELECT * FROM \`whatsapp\`.\`whitelist\` WHERE \`contacto\` = '${id}'`, function (err, result, fields) { if (err) { oracheck.fail("Fallo de MySQL"); } else if (result == []) { oracheck.warn("Usuario no encontrado en la whitelist"); return false } else { date = new Date(); horas_fecha = date.getHours(); minutos = date.getMinutes(); hora = `${horas_fecha}.${minutos}`; hora_desb = result[0].hora_desbloqueo; if (hora_desb == 0) { oracheck.info("El contacto está en la whitelist indefinidamente"); return true } else if (hora_desb <= hora) { oracheck.warn("Usuario no encontrado en la whitelist"); return false } else { oracheck.succeed("Resultado Encontrado: "); return true } } } ); }); } CheckearWhitelist("34676654601@c.us").then((value) => console.log(value));El caso es que si hago console.log(true/false) y no el return, funciona perfectamente. Pero cuando devuelvo verdadero/falso y hago un archivo console.log al llamar a la función, no funciona. Espero que alguien pueda ayudarme. Gracias
El problema es que cualquier valor de retorno de la función asíncrona que tiene allí no se devolverá como esperaba (se descartará o será utilizado por lib, pero no su código)
En su lugar, debe devolver el nuevo objeto Promise en el nivel superior y resolverlo dentro de la devolución de llamada cuando desee "devolver" valores.
function CheckearWhitelist(id) { return new Promise((resolve, reject) => { const oracheck = ora("Checkeando en la whitelist...").start(); con.connect(function(err) { if (err) { oracheck.fail( "Ha habido un fallo al conectarse a MySQL - Comprueba la conexión" ); } con.query( `SELECT * FROM \`whatsapp\`.\`whitelist\` WHERE \`contacto\` = '${id}'`, function(err, result, fields) { if (err) { oracheck.fail("Fallo de MySQL"); } else if (result == []) { oracheck.warn("Usuario no encontrado en la whitelist"); resolve(false) } else { date = new Date(); horas_fecha = date.getHours(); minutos = date.getMinutes(); hora = `${horas_fecha}.${minutos}`; hora_desb = result[0].hora_desbloqueo; if (hora_desb == 0) { oracheck.info("El contacto está en la whitelist indefinidamente"); resolve(true) } else if (hora_desb <= hora) { oracheck.warn("Usuario no encontrado en la whitelist"); resolve(false) } else { oracheck.succeed("Resultado Encontrado: "); resolve(true) } } } ); }); }) } CheckearWhitelist("34676654601@c.us").then((value) => console.log(value));