tipos sobre sencillos resueltos llamar funciones ejemplos desde codigos codigo javascript javascript-events

sobre - ¿Hay alguna manera de llamar a una función periódicamente en JavaScript?



tipos de funciones en javascript (9)

Como desea que la función se ejecute periódicamente , use setInterval

¿Hay alguna manera de llamar a una función periódicamente en JavaScript?



La forma nativa es de hecho setInterval() / clearInterval() , pero si ya está utilizando la biblioteca Prototype puede aprovechar PeriodicalExecutor:

new PeriodicalUpdator(myEvent, seconds);

Esto evita llamadas superpuestas. Desde http://www.prototypejs.org/api/periodicalExecuter :

"lo protege contra múltiples ejecuciones paralelas de la función de devolución de llamada, en caso de que tome más tiempo que el intervalo dado para su ejecución (mantiene un indicador interno de" ejecución ", que está protegido contra excepciones en la función de devolución de llamada). Esto es especialmente útil si use uno para interactuar con el usuario a intervalos determinados (por ejemplo, use un aviso o confirme una llamada): esto evitará que múltiples cuadros de mensajes estén esperando a ser activados ".


Tenga en cuenta que setInterval () a menudo no es la mejor solución para la ejecución periódica. Realmente depende de qué javascript llame en forma periódica.

p.ej. Si usa setInterval () con un período de 1000ms y en la función periódica realiza una llamada ajax que ocasionalmente demora 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 una ejecución periódica más robusta con una función que tenga una llamada jQuery ajax, 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 usar setTimeout pero realizar un seguimiento del tiempo transcurrido en una variable y luego establecer el retardo de tiempo de espera en cada invocación dinámicamente para ejecutar una función lo más cerca posible del intervalo deseado pero nunca más rápido de lo que puede obtener respuestas.


Todos ya tienen una solución setTimeout / setInterval. 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);


Una vieja pregunta 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 como en el nodo. Ver la documentation de todas las características.



Desea setInterval() :

var intervalID = setInterval(function(){alert("Interval reached");}, 5000);

El primer parámetro para setInterval() también puede ser una cadena de código para ser evaluado.

Puede borrar una función periódica con:

clearInterval(intervalID);


function test() { alert(''called!''); } var id = setInterval(''test();'', 10000); //call test every 10 seconds. function stop() { // call this to stop your interval. clearInterval(id); }