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

406
Vistas
¿Cómo usamos Async y cuál es la mejor manera en nodeJS?

Estoy tratando de pasar una consulta a mi base de datos, luego enviar el resultado a mi lado del cliente, pero parece que la solicitud es asíncrona, porque mi solicitud ocurre después de que mi solicitud de publicación devuelve el valor.

¿Cómo configuro una espera para la solicitud?

Mi conexion a la base de datos

 var connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'my_password', database: 'MEETME' }); connection.connect(function(err) { if (err) { console.log("error while connecting to database"); console.log(err.code); } }); // function that query database <------- function queryDatabase(userQuery) { connection.query(userQuery, function(err, result) { if (err) { throw err; } console.log("before"); return result; }); }

y esta es mi solicitud de publicación

 //POST app.post('/signin', function(request, response) { var query = queryDatabase("SELECT EMAIL FROM MEMBER WHERE ID_MEMBER = 3"); console.log(query); console.log("after"); response.end(query, 200); });

el resultado en la consola es:

 undefined after before
about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Cambie la implementación de la función queryDatabase para devolver una promesa. Se puede esperar cualquier función que devuelva una promesa.

 function queryDatabase(userQuery){ return new Promise((resolve,reject) => { connection.query(userQuery, function(err, result){ if(err){ reject(err); } console.log("before"); resolve(result); }); }); } app.post('/signin', async function(request, response){ var query = await queryDatabase("SELECT EMAIL FROM MEMBER WHERE ID_MEMBER = 3"); console.log(query); console.log("after"); response.end(query, 200); });
about 4 years ago · Santiago Trujillo Denunciar

0

Bienvenido a Node.js, donde todo está destinado a ser asíncrono y, a menos que estructure explícitamente su código de una manera que conecte en cascada un evento a otro, no hay obligación por parte del código de ejecutarse en ningún orden en particular.

Recomiendo enfáticamente elegir Promises como una forma de organizar el código si no está familiarizado con este concepto. Esto envuelve una gran cantidad de programación complicada en algunos métodos limpios y ordenados, y hace que el encadenamiento, el abanico de salida y el abanico de entrada sean realmente bastante simples.

Por ejemplo, reescrito con Sequelize , una capa de base de datos que usa promesas:

 function queryDatabase(userQuery){ console.log("before"); return connection.query(userQuery); }

Devuelves la promesa, y eso se usa para encadenar. Si no lo hace, debe aceptar un argumento de devolución de llamada y encadenarlo. Los valores de retorno se ignoran en gran medida:

 function queryDatabase(userQuery, cb){ connection.query(userQuery, function(err, result){ cb(err, result); }); console.log("before"); }

Puede ver que ya hay mucho más cruft, e incluso más si necesita construir a partir de eso. Insertar pasos opcionales en el código impulsado por la devolución de llamada es complicado .

Las promesas hacen que su código termine luciendo así:

 app.post('/signin', function(request, response){ queryDatabase("SELECT EMAIL FROM MEMBER WHERE ID_MEMBER = 3") .then(function(results) { console.log(results); console.log("after"); response.end(query, 200); }); });

También es trivial parchear el manejo de errores en un solo lugar con catch para manejar errores.

about 4 years ago · Santiago Trujillo 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