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

155
Vistas
¿Cómo obtener datos de MySQL y después de 30 segundos recuperarlos nuevamente en Node.js?

Lo que intento hacer es obtener los datos de acuerdo con la marca de tiempo de la base de datos una vez (llámelo origen) y espere 30 segundos para recuperarlos nuevamente con la misma consulta (llámelo reciente) en Node.js.

Compárelos si el origen y el reciente son iguales o no, luego haga algo que dependa del resultado.

Aquí está mi código:

 CREATE TABLE data( post_id VARCHAR(50) PRIMARY KEY, post_text TEXT , post_img varchar(500), post_time TIMESTAMP, );
 const finalFn = async () => { let origin let recent origin = await getOg() recent = await setTimeout(function () { db.execute( // this one is same function with getOg() `SELECT * FROM data WHERE post_time = (SELECT MAX(post_time) FROM data)` ) .then(data => { return data[0][0] }) .catch(err => console.log(err)) console.log("I'm going to get some post") }, 5000) //5sec console.log('1', origin) console.log('2', recent) console.log(originPost === recent) } finalFn()

obtuve 'oirgin' fácilmente como:

 { post_id: '12345', post_text: 'test', post_img: null, post_time: 2022-05-06... }

el 'reciente' debería ser el mismo en este momento, porque aún no se han insertado nuevos datos en la base de datos.

pero obtuve 'reciente' así:

 Timeout { _idleTimeout: 5000, _idlePrev: [TimersList], _idleNext: [TimersList], _idleStart: 158, _onTimeout: [Function (anonymous)], _timerArgs: undefined, _repeat: null, _destroyed: false, [Symbol(refed)]: true, [Symbol(kHasPrimitive)]: false, [Symbol(asyncId)]: 29, [Symbol(triggerId)]: 0 }

Todavía estoy aprendiendo asincrónico, así que creo que debo perderme algo en la parte settimeout...

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

setTimeout no hace async en absoluto, y solo devuelve un objeto Timeout, como notó. ( await algo que no es una Promesa solo devolverá el objeto en sí).

Querrás algo como esto. La función de delay es un patrón común para hacer que setTimeout esté disponible.

 function delay(number) { return new Promise((resolve) => setTimeout(resolve, number)); } async function getOg() { const res = await db.execute(`SELECT * FROM data WHERE post_time = (SELECT MAX(post_time) FROM data)`); return res[0][0]; } const finalFn = async () => { const origin = await getOg(); await delay(5000); const recent = await getOg(); console.log("1", origin); console.log("2", recent); };
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