很简单,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;
}
});
答案 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循环内的时间间隔,但是我发现这对我有用,并且比之有效。
确保检查间隔变量的范围(在上述情况下为计时器)