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...
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); };