Javascript setInterval 函数来清除自身

Javascript setInterval function to clear itself?

本文关键字:清除 setInterval 函数 Javascript      更新时间:2023-09-26
myInterval = setInterval(function(){
     MyFunction();
},50);
function MyFunction()
{
    //Can I call clearInterval(myInterval); in here?
}

间隔没有停止(未清除(,如果我上面编码的内容很好,那么它将帮助我在其他地方寻找导致问题的原因。谢谢。

编辑:让我们假设它在调用clearInterval之前完成几个间隔,这消除了对setTimeout的需求。

只要您有保存的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。当然,您可以在间隔函数本身中调用它。

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的答案似乎是最好的:)

你可以通过使用 window.setTimeout 的技巧来做到这一点

var Interval = function () {
    if (condition) {
        //do Stuff
    }
    else {
        window.setTimeout(Interval, 20);
    };
};
window.setTimeout(Interval, 20);