tiempo - repetir una funcion javascript
¿Cómo comenzar a establecer el ciclo de Intervalo inmediatamente? (4)
A veces uso este patrón ...
(function me() {
// Do something every 9 seconds
setTimeout(me, 9000);
})();
No es lo mismo, ya que esperará hasta que se ejecute algo antes de esperar ~ 9 segundos para volver a llamar. Sin embargo, esto a menudo es útil para que los eventos en la cola de eventos no se acumulen innecesariamente (sin embargo, es poco probable que algún código demore 9 segundos en ejecutarse :)
Tenga en cuenta que en IEs anteriores, el me
se filtrará al ámbito externo.
Esta pregunta ya tiene una respuesta aquí:
- Ejecute la función setInterval sin demora la primera vez 12 respuestas
En un setInterval
simple setInterval
setInterval(function() {
// Do something every 9 seconds
}, 9000);
La primera acción ocurrirá después de 9 segundos ( t=9s
). ¿Cómo forzar al bucle a realizar la primera acción de forma inmediata ( t=0
)?
Creo que es debido al mecanismo de setInterval
tener Delay - Action - Delay - Action ...
loop; en lugar de Action - Delay - Action - Delay ...
loop.
EDITAR: Mi función es de hecho un ciclo como
setInterval(function(){
$(''.test'').each(function(idx){
var duration = 1000;
$(this).delay(duration*idx);
Some stuff here
});
}, 4000);
Mantenlo simple. Puede usar una función nombrada en lugar de una función anónima; llámalo y establece un intervalo para ello.
function doSomething() {
console.log("tick");
}
doSomething();
setInterval(doSomething, 9000);
Cree un alcance si es necesario:
(function() {
function doSomething() {
console.log("tick");
}
doSomething();
setInterval(doSomething, 9000);
})();
Finalmente, lo siguiente funciona sin crear o afectar x
:
setInterval(function x() {
console.log("tick");
return x;
}(), 9000);
Use una función nombrada y llámela y asígnela al intervalo.
var myFnc = function() {
// Do something every 9 seconds
};
setInterval(myFnc, 9000);
myFnc();
La otra opción es usar setTimeout en su lugar.
var myFnc = function() {
// Do something every 9 seconds
setTimeout(myFnc, 9000);
};
myFnc();
setInterval () es una función realmente fea. Utilizo esta versión desinfectada, que llama a la función inmediatamente, y toma un tiempo en segundos, ANTES del parámetro de la función, por lo que llamarlo con una definición de función en línea realmente parece sensato.
function startInterval(seconds, callback) {
callback();
return setInterval(callback, seconds * 1000);
}