Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

416
Views
¿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
over 4 years ago · Santiago Trujillo
2 answers
Answer question

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); });
over 4 years ago · Santiago Trujillo Report

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.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!