He escrito una función basada en Promise que funciona de la manera que pretendía, pero no pude escribir una función que funcione solo con devoluciones de llamada. He creado el siguiente código que está destinado a devolver el resultado de una consulta de selección:
function getUserByEmail(email) { let sql = `SELECT * FROM userlogin WHERE Username = ?`; con.query(sql, email, (err, result) => { if (!err) { return result[0]; // callback returns the result } else { return err; } }) }En el caso del código anterior, la función devuelve indefinido, porque la función de orden superior no devuelve nada, pero la devolución de llamada sí.
Luego probé la función a continuación, pero en este caso con.query() devuelve un objeto que no entiendo y no tiene el resultado de la consulta en ninguna parte para encontrarlo en sus atributos.
function getUserByEmail(email) { let sql = `SELECT * FROM userlogin WHERE Username = ?`; let result = con.query(sql, email, (err, result) => { if (!err) { return result[0]; // callback returns the result } else { return err; } }); return result; }No tengo ideas, sé que si pudiera hacer que con.query() devuelva el valor de retorno de la devolución de llamada, podría obtener el resultado, pero ¿cómo lo hago?
A continuación se muestra la versión de la función que escribí con Promises, que devuelve el resultado de la consulta como pretendía.
function getUserByEmail(email) { let sql = `SELECT * FROM userlogin WHERE Username = ?`; return new Promise((resolve, reject) => { con.query(sql, email, (err, result) => { if (!err) { resolve(result[0]); } else { console.log(err); reject(err); } }) }) }