Estoy tratando de devolver los resultados (una matriz de objetos json) de mi función get_salt_and_hash(). Entonces quiero usar los resultados en otra función. (En este caso, la longitud de la matriz de resultados es uno).
Sin embargo, después de llamar a get_salt_and_hash() en mi otra función, cuando trato de imprimir el objeto no estoy definido. No estoy seguro de por qué, ya que funciona console.log (resultados) en la función original. Podria alguien ayudarme.
const get_salt_and_hash = (email) => { const query = `SELECT p_salt, p_hash FROM USERS_TABLE WHERE email= "${email}"`; db.query(query, (err, results) => { if (!err) { console.log(results); return results[0]; } else { throw err } })} const verify_user = (email, password) => { let result_obj = get_salt_and_hash(email); console.log(result_obj); // const p_hash = result_obj['p_hash']; // const p_salt = result_obj['p_salt']}
Sospecho que tiene algo que ver con el código asíncrono, ya que lleva tiempo realizar la consulta de db, pero no sé nada sobre javascript asíncrono, así que pensé que sería mejor preguntarle a otros.
¡Gracias por adelantado!
Tiene razón en eso, lleva tiempo obtener resultados de db, así que simplemente prometa la función query(), para que pueda usar await en la llamada a la función query(), modifiqué su código a continuación y prometí la consulta().
// Not tested. const util = require('util'); const get_salt_and_hash = async (email) => { const query = `SELECT p_salt, p_hash FROM USERS_TABLE WHERE email= "${email}"`; const promisifiedQuerFunction = util.promisify(db.query).bind(db); let results = await promisifiedQuerFunction(query); return results[0]; } const verify_user = async (email, password) => { let result_obj = await get_salt_and_hash(email); console.log(result_obj); }Puede aprender cómo escribir funciones asíncronas desde aquí