Un cierre de base solución, usando.210 y clearInterval()
:
// define a generic repeater
var repeater = function(func, times, interval) {
var ID = window.setInterval(function(times) {
return function() {
if (--times <= 0) window.clearInterval(ID);
func();
}
}(times), interval);
};
// call the repeater with a function as the argument
repeater(function() {
alert("stuff happens!");
}, 3, 60000);
EDIT: Otra forma de expresar la misma, utilizando setTimeout()
lugar:
var repeater = function(func, times, interval) {
window.setTimeout(function(times) {
return function() {
if (--times > 0) window.setTimeout(arguments.callee, interval);
func();
}
}(times), interval);
};
repeater(function() {
alert("stuff happens!");
}, 3, 2000);
Tal vez este último es un poco más fácil de entender.
En la versión setTimeout()
puede asegurarse de que la siguiente iteración solo ocurra después de que haya terminado de ejecutarse. Simplemente movería la línea func()
sobre la línea setTimeout()
.
rápido y sucio, pero ¿por qué no simplemente tener un incremento de contador cada vez que se ejecuta la solicitud y si (contador <3) {intervalRun();}? – Optimate
@optimate: ¿Qué es intervalRun()? – Nosredna
Quería decir 'setInterval'. – SLaks