Tengo una función simple que se llama cada segundo usando setInterval ,
Tengo que cambiar el valor para decir si hay actividad del mouse o del teclado.
Actualizo el valor de mi variable, pero siempre se establece en 0 aunque se llame a console.log .
function generateActivity() { var o = { is_mouse: 0, is_keyboard: 0 }; // Keyboard activity uiohook.uIOhook.on('keydown', (e) => { //console.log('Keyboard!') o.is_keyboard = 1; }) // Mouse activity uiohook.uIOhook.on('mousemove', (e) => { //console.log('mouse'); o.is_mouse = 1; }) console.log(o); } setInterval(generateActivity, 1*1000);Debe configurar sus oyentes solo una vez, no cada segundo: se acumulan, por lo que esto dará problemas.
En segundo lugar, su objeto o no debe crearse localmente cada segundo, lo que le dará tantos objetos como llamadas realizadas. Debe ser un solo objeto.
Algo como esto:
var o = { is_mouse: 0, is_keyboard: 0 }; // Keyboard activity uiohook.uIOhook.on('keydown', (e) => { //console.log('Keyboard!') o.is_keyboard = 1; }) // Mouse activity uiohook.uIOhook.on('mousemove', (e) => { //console.log('mouse'); o.is_mouse = 1; }) function generateActivity() { console.log(JSON.stringify(o)); // Make sure the object is displayed as we want it. o.is_mouse = o.is_keyboard = 0; // maybe reset after logging... } setInterval(generateActivity, 1*1000); Tenga en cuenta que he clasificado el objeto para la salida, ya que, de lo contrario, la consola puede mostrarlo con pereza, mostrando el 0 que se puso en las propiedades después de llamar a console.log .