Existe una manera de configurar el setInterval
método de javascript para ejecutar el método de inmediato y luego se ejecuta con el temporizador
javascript
setinterval
Jorge
fuente
fuente
function
una vez y luego hacer elsetInterval()
Respuestas:
Es más simple llamar a la función usted mismo directamente la primera vez:
Sin embargo, hay buenas razones para evitar
setInterval
: en particular, en algunas circunstancias, una carga completa desetInterval
eventos puede llegar inmediatamente uno después del otro sin demora. Otra razón es que si desea detener el ciclo, debe llamar explícitamente, loclearInterval
que significa que debe recordar el identificador devuelto por lasetInterval
llamada original .Entonces, un método alternativo es tener un
foo
desencadenante para llamadas posteriores usando en susetTimeout
lugar:Esto garantiza que haya al menos un intervalo
delay
entre llamadas. También hace que sea más fácil cancelar el ciclo si es necesario: simplemente no llamasetTimeout
cuando se alcanza la condición de finalización del ciclo.Mejor aún, puede envolver todo en una expresión de función invocada de inmediato que crea la función, que luego se llama a sí misma como se indicó anteriormente, y automáticamente inicia el ciclo:
que define la función y comienza el ciclo todo de una vez.
fuente
setTimeout
?setInterval
eventos puede llegar inmediatamente uno después del otro sin demora.setTimeout
método?No estoy seguro si te estoy entendiendo correctamente, pero podrías hacer algo como esto fácilmente:
Obviamente, hay varias formas de hacerlo, pero esa es la forma más concisa en la que puedo pensar.
fuente
arguments.callee
no está disponible en el modo estricto ES5Me topé con esta pregunta debido al mismo problema, pero ninguna de las respuestas ayuda si necesita comportarse exactamente igual,
setInterval()
pero con la única diferencia de que la función se llama inmediatamente al principio.Aquí está mi solución a este problema:
La ventaja de esta solución:
setInterval
puede adaptarse fácilmente mediante sustituciónclearInterval()
tardeEjemplo:
Para ser descarado, si realmente necesita usar
setInterval
, también podría reemplazar el originalsetInterval
. Por lo tanto, no se requiere un cambio de código al agregar esto antes de su código existente:Aún así, todas las ventajas enumeradas anteriormente se aplican aquí, pero no es necesaria ninguna sustitución.
fuente
setTimeout
solución porque devuelve unsetInterval
objeto. Para evitar llamar a funciones que pueden estar más adelante en el código y, por lo tanto, no definidas en el momento actual, envuelvo la primera llamada de función en unasetTimeout
función como esta:setTimeout(function(){ func();},0);
la primera función se llama después del ciclo de procesamiento actual, que también es inmediato , pero es Más error probado.Podría incluir
setInterval()
una función que proporcione ese comportamiento:... luego úsalo así:
fuente
Aquí hay un contenedor para personalizarlo si lo necesita:
Establezca el tercer argumento de setInterval en verdadero y se ejecutará por primera vez inmediatamente después de llamar a setInterval:
O omita el tercer argumento y conservará su comportamiento original:
Algunos navegadores admiten argumentos adicionales para setInterval que este contenedor no tiene en cuenta; Creo que estos rara vez se usan, pero tenlo en cuenta si los necesitas.
fuente
Para alguien necesita traer el exterior al
this
interior como si fuera una función de flecha.Si la producción de basura anterior le molesta, puede hacer un cierre en su lugar.
O tal vez considere usar el
@autobind
decorador dependiendo de su código.fuente
Sugeriré llamar a las funciones en la siguiente secuencia
También puede pasar el
_timer
mensaje al foo, si lo deseaclearInterval(_timer)
en una determinada condiciónfuente
Aquí hay una versión simple para principiantes sin todos los problemas. Simplemente declara la función, la llama y luego comienza el intervalo. Eso es.
fuente
Para resolver este problema, ejecuto la función por primera vez después de que la página se haya cargado.
fuente
Hay un conveniente paquete npm llamado firstInterval (divulgación completa, es mío).
Muchos de los ejemplos aquí no incluyen el manejo de parámetros y el cambio de comportamientos predeterminados de
setInterval
cualquier proyecto grande es malo. De los documentos:Este patrón
es idéntico a
Si eres de la vieja escuela en el navegador y no quieres la dependencia, es un fácil cortar y pegar del código.
fuente
Ok, esto es muy complejo, así que déjenme ponerlo más simple:
fuente
Puede establecer un tiempo de retraso inicial muy pequeño (por ejemplo, 100) y establecerlo en el tiempo de retraso deseado dentro de la función:
fuente
Hay un problema con la llamada asincrónica inmediata de su función, porque setTimeout / setInterval estándar tiene un tiempo de espera mínimo de varios milisegundos, incluso si lo configura directamente a 0. Esto se debe a un trabajo específico del navegador.
Un ejemplo de código con un REAL cero retraso que funciona en Chrome, Safari, Opera
Puedes encontrar más información aquí
Y después de la primera llamada manual, puede crear un intervalo con su función.
fuente
en realidad lo más rápido es hacer
esto llamará mi función, y luego lo hará de nuevo cada 45 segundos, lo que es diferente de hacerlo
que no lo llamará, pero solo programarlo
fuente
myFunction()
se devuelve solo. En cambio, modificar cada función que se llamará porsetInterval
él es un mejor enfoque para ajustarsetInterval
una vez como lo proponen las otras respuestas.