2011-10-04 22 views
15

En mi solicitud me encontré algo de código JavaScript que utiliza setInterval con 0 milisegundos, así:setInterval() el comportamiento con 0 milisegundos en JavaScript

self.setInterval("myFunction()",0); 

Obviamente, esto no parece ser una buena idea para mí . ¿Alguien puede decirme cuál será el comportamiento de setInterval aquí? ("myFunction" realiza una llamada AJAX al servidor)

Pregunto esto porque tengo un comportamiento irregular en mi aplicación. El 90% de las veces, la aplicación se comporta correctamente y se realiza exactamente una llamada al servidor. Sin embargo, a veces, se hacen múltiples llamadas al servidor (hasta ahora, el máximo es de 48 llamadas) y estoy casi seguro de que es la culpa de esta línea de código.

Respuesta

17

El navegador estableció un valor mínimo para el intervalo. Por lo general, 10 ms, pero puede depender del navegador. Esto significa repetir esto tan rápido como me sea permitido. La especificación W3C dice 4ms: http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#timers

Esto es correcto, pero probablemente revele un error de diseño.

EDITAR: Por cierto, es una mala práctica pasar una cadena a setTimeout/setInterval, pasar una función en su lugar ya que javascript tiene funciones de primera clase.

+0

Sí, creo que quienquiera que haya hecho eso significaba llamar a setTimeout() en su lugar. Lo cambiaré. –

0

tenerlo ejecuta sólo una vez con pequeño retraso, utilice setTimeOut lugar:

window.setTimeout(myFunction, 10); 

Como usted está usando AJAX, que no tienen que utilizar los temporizadores en absoluto - sólo llamar a la siguiente petición AJAX en la Devolución de llamada (evento completo/exitoso) de la solicitud actual de AJAX.

Publique su código actual y es posible que podamos guiarlo más.

+0

Creo que setTimeout() es lo que el codificador pretendía hacer, porque aquí no tiene sentido llamar al servidor varias veces. –

0

Supongo que en myFunction() hay un clearInterval.

Básicamente, ha establecido un intervalo que puede ocurrir con la mayor frecuencia posible. Si el navegador que ejecuta JavaScript realmente llega a la parte clearInterval antes de la próxima iteración del intervalo, entonces estará bien. De lo contrario, sucederá una y otra vez.

Use setTimeout en su lugar.

+0

No hay clearInterval :(. Creo que fue un error de codificación. Cambiaré a setTimeout. Gracias –

1

setInterval(myFunction, 0) llama a myFunction continuamente con una demora mínima. Es casi como llamar al myFunction en un bucle infinito. Excepto que aquí puede detener el ciclo utilizando el método clearInterval.

+0

@Brad Pensé que "excepto que se puede borrar con 'clearInterval'" era importante: P –

+0

Estaba pensando que fue un error con SO al hacer varias ediciones retrocede una o más: P –

+0

@Joseph, ¿qué quieres decir? No edité nada de su respuesta, acabo de agregar las etiquetas de código alrededor de las partes pertinentes. – Brad

Cuestiones relacionadas