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

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

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

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 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