clearInterval 什么都不做

clearInterval does nothing

很简单,setIntervall 正常启动't' go 为假,clearinterval 什么也不做,go 为真。所以如果 app.post 第三次执行,我有 2 个间隔,处理 t。我不明白为什么。

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

您必须像这样将变量设置为 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;
}
});

setInterval returns 需要传递给 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;
    }
});

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

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

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

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

所以后面清除区间时,只清除*顶层区间,下一级区间才进入。 (顶级可能不是正确的词)

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

设置间隔:

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

正在清除区间:

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

您可能决定清除 while 循环内的间隔,但我发现这对我有用,而且比那更有效。

Make sure you check the scope of the interval variable (i.e timer in the case above)