Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

208
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda