¿Hay alguna manera de llamar a una función periódicamente en JavaScript?¿Hay alguna manera de llamar a una función periódicamente en JavaScript?
Respuesta
¿Quieres setInterval()
:
var intervalID = setInterval(function(){alert("Interval reached");}, 5000);
El primer parámetro a setInterval() también puede ser una cadena de código para ser evaluados.
puede borrar una función periódica con:
clearInterval(intervalID);
sí - echa un vistazo a setInterval
and setTimeout
para ejecutar el código en determinados momentos. setInterval sería el que se usará para ejecutar el código periódicamente.
Ver un demo and answer here para el uso
Usted tendrá que echar un vistazo a setInterval() y setTimeout().
Aquí hay un decent tutorial article.
Desde desea que la función que se ejecuta periódicamente , utilice setInterval
function test() {
alert('called!');
}
var id = setInterval('test();', 10000); //call test every 10 seconds.
function stop() { // call this to stop your interval.
clearInterval(id);
}
jaja, esta fue respondida rápidamente. heh. Lo siento por el doble post. –
Cada uno tiene una solución setInterval setTimeout/ya. Creo que es importante tener en cuenta que puede pasar funciones a setInterval, no solo cadenas. Es probable que sea un poco más "seguro" pasar funciones reales en lugar de cadenas que serán "evadidas" a esas funciones.
// example 1
function test() {
alert('called');
}
var interval = setInterval(test, 10000);
O:
// example 2
var counter = 0;
var interval = setInterval(function() { alert("#"+counter++); }, 5000);
+1 Si eres un estudiante de la [escuela de JavaScript de Crockford] (http://javascript.crockford.com/code.html), evitas la evaluación en todas sus formas malvadas. –
@Patrick - No creo que la sugerencia "No usar $ (signo de dólar) o \ (barra invertida) en los nombres" saldrá bien con el lote jQuery :) –
La forma nativa es de hecho setInterval()
/clearInterval()
, pero si usted ya está usando la biblioteca Prototype usted puede tomar ventaja de PeriodicalExecutor:
new PeriodicalUpdator(myEvent, seconds);
Esto evita llamadas superpuestas. De http://www.prototypejs.org/api/periodicalExecuter:
"que le protege contra múltiples ejecuciones paralelas de la función de devolución de llamada, debe tomar más tiempo que el intervalo dado para ejecutar (que mantiene una interna‘funcionamiento’de la bandera, que está protegida contra excepciones en la devolución de llamada función). Esto es especialmente útil si usa uno para interactuar con el usuario a intervalos determinados (por ejemplo, usar un aviso o confirmar una llamada): esto evitará que múltiples cuadros de mensajes estén esperando ser activados ".
Tenga en cuenta que setInterval() a menudo no es la mejor solución para la ejecución periódica - Es muy depende de lo javascript en realidad estás llamando periódicamente.
por ejemplo. Si usa setInterval() con un período de 1000ms y en la función periódica realiza una llamada ajax que ocasionalmente tarda 2 segundos en regresar, hará otra llamada ajax antes de que la primera respuesta regrese. Esto generalmente no es deseable.
Muchas bibliotecas tienen métodos periódicos que protegen contra las trampas de usar setInterval ingenuamente, como el ejemplo de prototipo dado por Nelson.
Para lograr la ejecución periódica más robusto con una función que tiene una llamada ajax jQuery en ella, considere algo como esto:
function myPeriodicMethod() {
$.ajax({
url: ...,
success: function(data) {
...
},
complete: function() {
// schedule the next request *only* when the current one is complete:
setTimeout(myPeriodicMethod, 1000);
}
});
}
// schedule the first invocation:
setTimeout(myPeriodicMethod, 1000);
Otro enfoque es utilizar setTimeout pero medir el tiempo transcurrido en una variable y luego configure el tiempo de espera de cada invocación dinámicamente para ejecutar una función tan cerca del intervalo deseado como sea posible, pero nunca más rápido de lo que puede obtener respuestas de vuelta.
setTimeout (myPeriodicMethod, 1000); se llama 2 veces. es requerido? Creo que el tiempo de espera establecido solo debe invocarse en la función completa –
Sí, el segundo setTimeout() no es un requisito, simplemente puede llamar a myPeriodicMethod() que realizaría la primera llamada ajax inmediatamente ... pero si desea * programarlo * con un retraso desde la primera llamada que podría escribir como lo he escrito. –
Pregunta anterior pero ... También necesitaba un corredor de tareas periódicas y escribí TaskTimer. Esto también es útil cuando necesita ejecutar múltiples tareas en diferentes intervalos.
// Timer with 1000ms (1 second) base interval resolution.
var timer = new TaskTimer(1000)
// Add task(s) based on tick intervals.
timer.addTask({
name: 'job1', // unique name of the task
tickInterval: 5, // run every 5 ticks (5 x interval = 5000 ms)
totalRuns: 10, // run 10 times only. (set to 0 for unlimited times)
callback: function (task) {
// code to be executed on each run
console.log(task.name + ' task has run ' + task.currentRuns + ' times.');
}
});
// Start the timer
timer.start();
TaskTimer
funciona tanto en el navegador y el Nodo. Ver documentation para todas las funciones.
- 1. Llamar a la función periódicamente en Java
- 2. para llamar periódicamente a una función de Javascript
- 3. ¿Hay alguna manera de llamar a ruby1.9 sin cargar rubygems?
- 4. ¿Hay alguna manera de llamar a Navigate desde el ViewModel?
- 5. ¿Hay alguna manera de llamar a una subfunción en el modo de célula en matlab?
- 6. ¿Hay alguna manera de hacer una función atómica en C? .
- 7. En IDA Pro, ¿hay alguna manera de marcar una función?
- 8. ¿Cómo llamar a una función autoejecutable en JavaScript?
- 9. hay alguna función como string.isnullorempty() en javascript
- 10. ¿Hay alguna manera de pasar una función de inicialización a una presentación de diapositivas de Orbit?
- 11. ¿Hay alguna manera de agregar try-catch a cada función en Javascript?
- 12. Llamar a función recursiva en JavaScript
- 13. Llamar a la función php desde JavaScript
- 14. ¿Hay alguna manera de "eliminar" una función virtual pura?
- 15. ¿Hay alguna manera de aplicar una función a cada miembro de una estructura en C++?
- 16. ¿Hay alguna manera de ajustar todos los métodos de JavaScript con una función?
- 17. cómo llamar a una función javascript en el marco superior?
- 18. Llamar a la función javascript en iframe
- 19. ¿Hay alguna manera de pausar una CABasicAnimation?
- 20. ¿Cómo llamar a una función de PHP en JavaScript?
- 21. ¿Hay alguna manera de desactivar una etiqueta?
- 22. Mejor manera de llamar a la función javascript en una etiqueta
- 23. ¿Llamar a una función variadic dentro de una función variadic en Javascript?
- 24. ¿Cómo llamar a una función de JavaScript desde PHP?
- 25. ¿Cuánta sobrecarga hay para llamar a una función en C++?
- 26. ¿Hay alguna manera de crear y ejecutar javascript en Chrome?
- 27. WebKit.NET para llamar a una función de C# desde JavaScript
- 28. ¿Hay alguna manera de clasificar/ordenar claves en objetos JavaScript?
- 29. ¿Hay alguna manera de probar la referencia circular en JavaScript?
- 30. Llamar a una función de Javascript de Silverlight
Subí y luego decidí rescindir mi voto popular (pero no el voto a favor) porque está utilizando un argumento de cadena para establecer Intervalo. Las funciones casi siempre deben usarse a favor de un argumento de cadena, para la eficiencia, la seguridad y sus características de cierre. –
Está bien, no me importa. 'setInterval()' es la respuesta correcta a la pregunta, sin importar el parámetro. Es solo un ejemplo, y ambos métodos son por definición correctos. – zombat
Estoy de acuerdo con Jason S; realmente debería ser una función. En su ejemplo, el único problema es una pérdida de rendimiento insignificante, pero es un mal hábito entrar. –