let cnt=0; let i = setInterval(() => { console.log(cnt++); },200) setTimeout(() => { clearInterval(i); },2000); Cuando se ejecuta en el navegador, este código registra: - 0 1 2 3 4 5 6 7 8 9
Pero cuando se ejecuta usando Node, registra: - 0 1 2 3 4 5 6 7 8
¿Cuál es la razón para esto?
Esto se debe a que Chrome corrige automáticamente la deriva en setInterval . node (y otros navegadores) no. Tenga en cuenta que actualmente las especificaciones coinciden con el nodo, incluso si hay una discusión activa para seguir el comportamiento de Chrome.
Entonces, en Chrome, es como si tuvieras una precisa
at beginTime + 200 do fn at beginTime + 400 do fn at beginTime + 600 do fn ...etcmientras que en otros será
at beginTime + 200 do fn at now + 200 do fn ...etc. Pero sabemos que siempre habrá algún retraso que impida que el temporizador se active exactamente cuando está programado, por lo que en entornos sin corrección de deriva, terminamos con un now que es posterior al tiempo esperado.
Entonces, en Chrome, el trabajo setInterval estará en la cola antes que el setTimeout , mientras que en otros entornos, vendrá después, debido a la deriva, incluso si es infinitesimalmente pequeña.