Tengo una aplicación express que ejecuta socket.io en mi raspberry pi que controla un panel LED. Para controlar el panel, tengo un bucle while que actualiza constantemente los píxeles del panel. Quiero poder cambiar los parámetros de ese bucle o cambiar a un bucle diferente para controlar qué animación muestra el panel.
¿Cuál es la mejor manera de hacer esto? Cuando he intentado simplemente pasar un nuevo mensaje socket.io al servidor, el mensaje no se recibe porque está bloqueado por el bucle. Puedo iniciar la primera animación de esta manera pero los mensajes subsiguientes están bloqueados.
Puedo proporcionar fragmentos de código si es necesario.
En lugar de un bucle, use una función que se llame asíncronamente al final. Esto permite que los eventos como los mensajes de socket.io se manejen antes de la siguiente ejecución de la función.
La siguiente página HTML ilustra la idea. El bucle incrementa un contador cada segundo y al presionar el botón, puede aumentar el incremento.
<!DOCTYPE html><html> <head> <script type="text/javascript"> var counter = 0, increment = 1; function loop() { counter += increment; document.querySelector("span").textContent = counter; setTimeout(loop, 1000); } </script> </head> <body onload="loop()"> <span></span> <button onclick="increment++">Count faster</button> </body> </html> Aquí, setTimeout(loop) es "suficientemente asíncrono" para permitir eventos de clic, mientras que Promise.resolve().then(loop) no lo sería. Como dice el comentario a continuación, su código es necesario para juzgar cómo funciona para sus eventos.