Подтвердить что ты не робот

Функция Javascript setInterval, чтобы очистить себя?

myInterval = setInterval(function(){
     MyFunction();
},50);

function MyFunction()
{
    //Can I call clearInterval(myInterval); in here?
}

Интервал не останавливается (не очищается), если то, что я закодировал выше, хорошо, тогда это поможет мне найти в другом месте причину проблемы. Спасибо.

EDIT: предположим, что он завершает несколько интервалов до вызова clearInterval, который устраняет необходимость в setTimeout.

4b9b3361

Ответ 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);