clearInterval什么都不做

时间:2015-10-07 12:26:33

标签: javascript setinterval clearinterval

很简单,setIntervall正常启动't'并且go为false,clearinterval什么都不做,go是真的。因此,如果app.post第三次执行,我有2个Intervalls,处理t。我不明白为什么。

go= true;
app.post('/s', function s(req, res){
    if (go){
        setInterval(t, 3000);
        go = false;
    }else{
        clearInterval(t);
        go = true;
    }
});

3 个答案:

答案 0 :(得分:4)

setInterval返回需要传递给clearInterval的标识符 - 您不会通过传递函数引用来清除它:

go= true;
var interval=0;
app.post('/s', function s(req, res){
    if (go){
        interval = setInterval(t, 3000);
        go = false;
    }else{
        clearInterval(interval);
        go = true;
    }
});

答案 1 :(得分:2)

您必须将变量设置为setInterval,如下所示:

go= true;
var interval = 0;
app.post('/s', function s(req, res){
 if (go){
    interval = setInterval(t, 3000);
    go = false;
}else{
    clearInterval(interval);
    go = true;
}
});

答案 2 :(得分:0)

首先;您必须按照其他答案的建议将setInterval分配给一个变量,如果它仍然不起作用,请继续阅读下面的内容...

好吧,我经历了同样的问题太多次了,通常我会顺其自然, 但是大多数时候,我意识到清除间隔后间隔会继续运行,这可能会影响设备的性能(就像有一个无限循环)。

所以我做了一些研究,发现了问题所在,然后编写了简单的代码来解决它。

现在,在大多数情况下,当您启动一个间隔(很可能是由事件触发)时,就会声明该间隔的多个实例(无论出于何种原因)...

因此,当您以后清除间隔时,仅清除* top-level间隔,然后设置下一个级别间隔。 (顶层可能不是正确的单词)

为了真正清除间隔,我使用了以下方法:

设置时间间隔:

if(!timer)   
    timer =setInterval(myFunction, 1000);

清除间隔:

clearInterval(timer);
timer=null;
while (timer!== null){
    timer=null;
}

您可能决定清除while循环内的时间间隔,但是我发现这对我有用,并且比之有效。

确保检查间隔变量的范围(在上述情况下为计时器)