ejemplo - ¿La función Javascript setInterval para borrarse?
settimeout java (5)
Desde su código, lo que parece querer hacer es ejecutar una función y ejecutarla una y otra vez hasta que se realice un trabajo ...
Esa es realmente una tarea para el setTimeout()
, el enfoque es similar:
var myFunction = function(){
if( stopCondition ) doSomeStuff(); //(do some stuff and don''t run it again)
else setTimeout( myFunction, 50 );
}
myFunction(); //immediate first run
Simple como eso :)
Por supuesto, si REALMENTE quiere usar setInterval por alguna razón, la respuesta de @jbabey parece ser la mejor :)
myInterval = setInterval(function(){
MyFunction();
},50);
function MyFunction()
{
//Can I call clearInterval(myInterval); in here?
}
El intervalo no se detiene (no se borra), si lo que he codificado arriba está bien, entonces me ayudará a buscar en otro lugar lo que está causando el problema. Gracias.
EDITAR: Supongamos que completa algunos intervalos antes de llamar a clearInterval, lo que elimina la necesidad de setTimeout.
Mientras tenga alcance la variable de interval
guardada, puede cancelarla desde cualquier lugar.
En un ámbito "infantil":
var myInterval = setInterval(function(){
clearInterval(myInterval);
},50);
En un ámbito de "hermano":
var myInterval = setInterval(function(){
foo();
},50);
var foo = function () {
clearInterval(myInterval);
};
Incluso podría pasar el intervalo si saliera de alcance:
var someScope = function () {
var myInterval = setInterval(function(){
foo(myInterval);
},50);
};
var foo = function (myInterval) {
clearInterval(myInterval);
};
Puedes hacerlo usando un truco con window.setTimeout
var Interval = function () {
if (condition) {
//do Stuff
}
else {
window.setTimeout(Interval, 20);
};
};
window.setTimeout(Interval, 20);
var interval = setInterval(function() {
if (condition) clearInterval(interval); // here interval is undefined, but when we call this function it will be defined in this context
}, 50);
O
var callback = function() { if (condition) clearInterval(interval); }; // here interval is undefined, but when we call this function it will be defined in this context
var interval = setInterval(callback, 50);
clearInterval(myInterval);
hará el truco para cancelar el intervalo cuando lo necesite. Si desea cancelar inmediatamente después de la primera llamada, debe tomar setTimeout
en setTimeout
lugar. Y seguro que puedes llamarlo en la propia función de Intervalo.
var myInterval = setInterval(function() {
if (/* condition here */){
clearInterval(myInterval);
}
}, 50);
ver un EJEMPLO aquí .