Tengo un código simple como sigue:
setInterval(() => { window.scrollTo(x, y); // some simple logic (like console.log) goes here },1000); window.addEventListener('scroll', () => { console.log('scroll'); });Como espero, el controlador de eventos se ejecuta inmediatamente después de window.scrollTo(), pero a veces " alguna lógica simple " se ejecuta antes que el controlador de desplazamiento. ¿Por qué?
El orden de ejecución no es como está en el código (cronológicamente). El detector de eventos se activa en el evento de desplazamiento (parte del mecanismo de bucle par de JS) y la función asíncrona setInterval se ejecuta cada segundo. JS no admite subprocesos múltiples, por lo que supongo que los procesos se ordenan en algún tipo de cola y una de las ejecuciones (la función setInterval se ejecuta en un intervalo de tiempo estricto, mientras que eventListener se ejecuta cuando se ha activado).
Tal vez intente reconstruir la lógica para evitar este efecto. Puede usar esto como referencia aquí .