Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

213
Vistas
Necesito ayuda: ¿Cómo resuelvo esta función?
const getDbInfo = (anArrayOfIDs) => { return new Promise(function(resolve, reject){ let arrayOfDbInfoToSendBack = []; for(let i = 0; i <= anArrayOfIDs.length-1; i++){ pool.query( "SELECT * FROM `tbl_ofInfo` WHERE tbl_ofInfo.sqlID = '" + anArrayOfIDs[i] + "';", async(err, res) => { if (err) { console.log("error: ", err); } else { for(let k = 0; k <= res.length-1; k++){ arrayOfDbInfoToSendBack.push(res); } resolve(arrayOfDbInfoToSendBack); } } ); } }); }

Se esperaba que esta función devolviera una matriz de objetos con información. Sospecho que estoy usando resolve incorrectamente y devolviendo una matriz de solo 1 objeto cuando quiero una matriz de múltiples objetos en ella.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

En SQL, cada consulta es una promesa, por lo que no es necesario consultar dentro de una promesa. Para simplificar la resolución, puede usar async/await.

 //Setting function asynchronous const getDbInfo = async (anArrayOfIDs) => { let arrayOfDbInfoToSendBack = []; for(let i = 0; i <= anArrayOfIDs.length-1; i++){ let query = "SELECT * FROM `tbl_ofInfo` WHERE tbl_ofInfo.sqlID = '" + anArrayOfIDs[i] + "';" //Awaiting until the sql query resolved or rejected await pool.query(query,(err, res)=>{ if (err) console.error(err) else { for(let k = 0; k <= res.length-1; k++){ arrayOfDbInfoToSendBack.push(res); } }) } }

Por cierto, no estoy seguro de que esta función funcione si la declaras fuera de tu ruta. Porque Nodejs intentará ejecutarlo una vez que el servidor esté activo y falle porque no puede encontrar un argumento de anArrayOfIDs . Entonces, use la función dentro de su ruta. Si tiene que usarlo con frecuencia, mueva su función a un archivo .js diferente, expórtelo desde allí y luego impórtelo como middleware donde desee usarlo.

about 4 years ago · Juan Pablo Isaza Denunciar

0

¿Funciona este fragmento de código?

 const getDbInfo = (anArrayOfIDs) => { return new Promise(function(resolve, reject) { pool.query("SELECT * FROM `tbl_ofInfo` WHERE tbl_ofInfo.sqlID IN (?)", anArrayOfIDs , (err, res) => { if (err) { console.log("error: ", err); reject(err); return; } resolve(res) } ); }); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Si el único objeto que se devuelve es el correcto, entonces el problema puede originarse en el hecho de que está resolviendo dentro del bucle for. Eso significa que solo se llama a la primera iteración y luego, como la promesa ya se resolvió, las siguientes iteraciones son obsoletas considerando la naturaleza de devolución de llamada de pool.query . Supongo que esperar antes de que pueda resolver el problema

 const getDbInfo = (anArrayOfIDs) => { return new Promise(async function (resolve, reject) { let arrayOfDbInfoToSendBack = []; anArrayOfIDs.forEach(async (id) => { await pool.query( "SELECT * FROM `tbl_ofInfo` WHERE tbl_ofInfo.sqlID = '" + id + "';", async (err, res) => { if (err) { console.log("error: ", err); } else { for (let k = 0; k <= res.length - 1; k++) { arrayOfDbInfoToSendBack.push(res); } } } ); resolve(arrayOfDbInfoToSendBack); }); }); }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda