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

444
Vistas
Node.js y SQL: ¿Cómo puedo obtener el valor fuera del bucle for?

Usando Node.js y una base de datos MySQL, estoy trabajando en un pequeño proyecto.

Estoy tratando de recorrer una matriz para obtener algunos valores de una base de datos MySQL. Estoy buscando el "ID de medicamento" correspondiente a un "nombre de medicamento" que ingresó el usuario. Mi código funciona correctamente y así es como se ve.

 var medizinArray = []; function appendArray(input) { medizinArray.push(input); } var sqlMedNameToId = "SELECT MedikamentId FROM Medikament WHERE Bezeichnung = ?" for (var i=0;i<medicineMontag.length;i++){ var montagsMedizin = medicineMontag[i]; mySqlConnection.query(sqlMedNameToId, montagsMedizin, function(err, rows, fields){ if(!err) { result = rows[0].MedikamentId; appendArray(result); } else { console.log(err); } }) } console.log(medizinArray);

El código funciona, pero no puedo sacar el medizinArray del bucle for. En mi consola obtengo una matriz vacía. Cuando coloco el archivo console.log(medizinArray) dentro del bucle for, obtengo la matriz que quiero.

Actualmente no estoy familiarizado con Promises. Leí sobre esto y vi algunas otras preguntas, pero no puedo entender cómo implementar Promises en mi código.

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

0

Las operaciones de SQL son asíncronas, por lo que para obtener el resultado fuera de la devolución de llamada, debe envolverlas en una Promesa y llamar a la función resolve() cuando la operación sea exitosa. Utilice cualquiera de las siguientes técnicas:

Técnica asíncrona/espera:

 (async function(){ let medizinArray = []; function appendArray(input) { medizinArray.push(input); } let sqlMedNameToId = "SELECT MedikamentId FROM Medikament WHERE Bezeichnung = ?" await new Promise(function(resolve, reject){ let e; for (let i=0;i<medicineMontag.length;i++){ let montagsMedizin = medicineMontag[i]; mySqlConnection.query(sqlMedNameToId, montagsMedizin, function(err, rows, fields){ if(e) return; if(!err) { result = rows[0].MedikamentId; appendArray(result); } else { //console.log(err); e = true; return reject(err); } if(i == medicineMontag.length-1) resolve(result); }) } } ); console.log(medizinArray);//now medizinArray shows up here })().catch(function(err){console.log(err)});

Promesa/entonces técnica:

 let medizinArray = []; function appendArray(input) { medizinArray.push(input); } let sqlMedNameToId = "SELECT MedikamentId FROM Medikament WHERE Bezeichnung = ?" new Promise(function(resolve, reject){ let e; for (let i=0;i<medicineMontag.length;i++){ let montagsMedizin = medicineMontag[i]; mySqlConnection.query(sqlMedNameToId, montagsMedizin, function(err, rows, fields){ if(e) return; if(!err) { result = rows[0].MedikamentId; appendArray(result); } else { console.log(err); e = true; return reject(err); } if(i == medicineMontag.length-1) resolve(result); }) } } ).then(function(result){ console.log(medizinArray);//now medizinArray shows up here }).catch(function(err){ console.log(err); });
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