Функция Javascript setInterval, чтобы очистить себя?
myInterval = setInterval(function(){
MyFunction();
},50);
function MyFunction()
{
//Can I call clearInterval(myInterval); in here?
}
Интервал не останавливается (не очищается), если то, что я закодировал выше, хорошо, тогда это поможет мне найти в другом месте причину проблемы. Спасибо.
EDIT: предположим, что он завершает несколько интервалов до вызова clearInterval, который устраняет необходимость в setTimeout.
Ответы
Ответ 1
Пока у вас есть область для сохраненной переменной interval
, вы можете отменить ее из любого места.
В области "child":
var myInterval = setInterval(function(){
clearInterval(myInterval);
},50);
В области "sibling":
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);
};
Ответ 2
clearInterval(myInterval);
сделает трюк, чтобы отменить интервал, когда вам это нужно.
Если вы хотите немедленно отменить после первого вызова, вы должны взять setTimeout
вместо этого. И обязательно вы можете вызвать его в самой функции Interval.
var myInterval = setInterval(function() {
if (/* condition here */){
clearInterval(myInterval);
}
}, 50);
см. ПРИМЕР здесь.
Ответ 3
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);
Ответ 4
Из вашего кода то, что вы хотите сделать, это запустить функцию и запустить ее снова и снова, пока не будет выполнено какое-то задание...
Это на самом деле задача для 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 кажется лучшим:)
Ответ 5
Вы можете сделать это, используя трюк с window.setTimeout
var Interval = function () {
if (condition) {
//do Stuff
}
else {
window.setTimeout(Interval, 20);
};
};
window.setTimeout(Interval, 20);