Javascript setInterval функция, чтобы очистить себя?
myInterval = setInterval(function(){
MyFunction();
},50);
function MyFunction()
{
//Can I call clearInterval(myInterval); in here?
}
интервал не останавливается (не очищается), если то, что я закодировал выше, в порядке, это поможет мне искать в другом месте то, что вызывает проблему. Спасибо.
EDIT: предположим, что он завершает несколько интервалов до вызова clearInterval, который устраняет необходимость в setTimeout.
5 ответов
пока у вас есть область для сохраненного interval
переменная, вы можете отменить ее из любого места.
в области" ребенок":
var myInterval = setInterval(function(){
clearInterval(myInterval);
},50);
в области" брата":
var myInterval = setInterval(function(){
foo();
},50);
var foo = function () {
clearInterval(myInterval);
};
вы даже можете пройти интервал, если он выйдет за рамки:
var someScope = function () {
var myInterval = setInterval(function(){
foo(myInterval);
},50);
};
var foo = function (myInterval) {
clearInterval(myInterval);
};
clearInterval(myInterval);
будет делать трюк, чтобы отменить интервал, когда вам это нужно.
Если вы хотите немедленно отменить после первого звонка, вы должны принять setTimeout
вместо. И конечно, вы можете вызвать его в самой функции Interval.
var myInterval = setInterval(function() {
if (/* condition here */){
clearInterval(myInterval);
}
}, 50);
посмотреть пример.
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);
или
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);
из кода кажется, что вы хотите сделать, это запустить функцию и запускать ее снова и снова, пока некоторые задания...
это на самом деле задача для setTimeout()
этот подход аналогичен:
var myFunction = function(){
if( stopCondition ) doSomeStuff(); //(do some stuff and don't run it again)
else setTimeout( myFunction, 50 );
}
myFunction(); //immediate first run
просто :)
конечно, если вы действительно хотите использовать setInterval по какой-то причине, ответ @jbabey кажется лучшим:)
вы можете сделать это, используя трюк с окном.функции setTimeout
var Interval = function () {
if (condition) {
//do Stuff
}
else {
window.setTimeout(Interval, 20);
};
};
window.setTimeout(Interval, 20);