Existe una manera de configurar el setIntervalmétodo de javascript para ejecutar el método de inmediato y luego se ejecuta con el temporizador
javascript
setinterval
Jorge
fuente
fuente

functionuna 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 desetIntervaleventos puede llegar inmediatamente uno después del otro sin demora. Otra razón es que si desea detener el ciclo, debe llamar explícitamente, loclearIntervalque significa que debe recordar el identificador devuelto por lasetIntervalllamada original .Entonces, un método alternativo es tener un
foodesencadenante para llamadas posteriores usando en susetTimeoutlugar:Esto garantiza que haya al menos un intervalo
delayentre llamadas. También hace que sea más fácil cancelar el ciclo si es necesario: simplemente no llamasetTimeoutcuando 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?setIntervaleventos puede llegar inmediatamente uno después del otro sin demora.setTimeoutmé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.calleeno 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:
setIntervalpuede 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
setTimeoutsolución porque devuelve unsetIntervalobjeto. 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 unasetTimeoutfunció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
thisinterior 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
@autobinddecorador dependiendo de su código.fuente
Sugeriré llamar a las funciones en la siguiente secuencia
También puede pasar el
_timermensaje 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
setIntervalcualquier 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 ajustarsetIntervaluna vez como lo proponen las otras respuestas.