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

242
Vistas
ExpressJS Await no funciona - SQL SELECT demasiado rápido (antes de INSERT)

Quiero hacer una inserción de SQL y luego una selección con la lista completa para mostrar en Vue, incluida la nueva entrada. Pero Seleccionar es más rápido que Insertar y solo devuelve los valores antiguos que ya están en la Tabla. Probé con setTimeout y Async-Await. (Las declaraciones SQL están funcionando)

¿Puede alguien ayudarme? Soy nuevo en JS.

 async function select_time(datum, mitarbeiter_id){ let returnQuery = 'SELECT ...' let retquery = mysql.format(returnQuery,[datum, mitarbeiter_id]); pool.query(retquery,(err, data) => { if(err) { console.error(err); return err } return data }); } async function insert_time(datum, mitarbeiter_id, projekt_id, zeit_von, zeit_bis, stunden, taetigkeit){ let selectQuery = 'INSERT INTO ...'; let query = mysql.format(selectQuery,[taetigkeit, projekt_id, mitarbeiter_id, zeit_von, zeit_bis, stunden, datum]); pool.query(query,(err) => { if(err) { console.error(err); } }); if(taetigkeit == 15){ let updateQuery = "UPDATE ..." let query2 = mysql.format(updateQuery, [mitarbeiter_id]) pool.query(query2,(err, data) => { if(err) { console.error(err); } }); } } async function run_insert_time(datum, mitarbeiter_id, projekt_id, zeit_von, zeit_bis, stunden, taetigkeit){ await insert_time(datum, mitarbeiter_id, projekt_id, zeit_von, zeit_bis, stunden, taetigkeit) const jsret = await select_time(datum, mitarbeiter_id) return jsret } app.get('/insertTime', (req, res) => { const datum = req.query.datum; const mitarbeiter_id = req.query.mitarbeiter_id; let projekt_id = req.query.projekt_id; let zeit_von = req.query.zeit_von; let zeit_bis = req.query.zeit_bis; const stunden = req.query.stunden; const taetigkeit = req.query.taetigkeit; const js = run_insert_time(datum, mitarbeiter_id, projekt_id, zeit_von, zeit_bis, stunden, taetigkeit) res.json(js) })
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Si pool.query no tiene una función similar con el soporte de Promise, entonces debe envolver todas esas llamadas en promesas para poder esperar los resultados y devolverlos si lo desea.

 async function select_time(datum, mitarbeiter_id){ let returnQuery = 'SELECT ...' let retquery = mysql.format(returnQuery,[datum, mitarbeiter_id]); return new Promise((resolve, reject) => { pool.query(retquery,(err, data) => { if(err) { console.error(err); reject(err); } resolve(data); }); }); }

Mire esta respuesta para obtener más información sobre cómo convertir funciones con devoluciones de llamada en funciones similares a promesas.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Para ampliar la muy buena respuesta de @anatoly:

Considero que la return new Promise... es visualmente perjudicial para el flujo del programa. Al crear una versión "prometida" separada, su función asíncrona se vuelve mucho más limpia. Es solo reorganizar el código, con el mismo resultado final.

 const pQuery = qryText => new Promise((resolve, reject) => { pool.query(qryText, (err, data) => { if (err) reject(err); else resolve(data); }); });

Entonces sus async function vuelven bastante limpias. Por ejemplo:

 async function select_time(datum, mitarbeiter_id){ let returnQuery = 'SELECT ...' let retquery = mysql.format(returnQuery,[datum, mitarbeiter_id]); const data = await pQuery(retquery); return data; }

Aparte: node.js tiene util.promisify , lo que hace que esto sea aún más fácil de implementar.

 const { promisify } = require('util'); const pQuery = promisify(pool.query.bind(pool));

(Estoy bastante seguro de que necesita el bind , pero puede probar sin él y ver si funciona)

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