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

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

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

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