我有一个设置计时器的函数,并在计时器到期时调用自身.
我想知道的是清除函数顶部的计时器是不好的做法.
这是因为我将不时地异步调用该函数,如果我不先清除定时器,我将同时运行两个.
我意识到我可以在我对该函数进行另一次调用之前清除计时器,但是我想知道如果我只是在包含计时器的函数内部保持cleartimeout调用它是否会导致任何浏览器出现问题.
另一个想法 - 我可以在进行cleartimeout调用之前测试timer变量,看看它是否是一个计时器?
这是一些示例代码:
function onAir(){
// reset timer
clearTimeout(timer);
$.getJSON("http://mywebsite.com?format=json&callback=?",function(data){
if(data.result == '1'){
do stuff here
}
else{
do other stuff here
}
});
// start timer
timer = setTimeout("onAir()",60000);
}
Run Code Online (Sandbox Code Playgroud)
谢谢你和我分享你的大脑!
肯尼
Poi*_*nty 17
是的,没关系.另外,你应该像这样调用"setTimeout()":
timer = setTimeout(onAir, 60000);
Run Code Online (Sandbox Code Playgroud)
Nea*_*eal 17
是的,您可以在null
变量上调用clearTimeout .
另外我建议你改变你setTimeout
所以它不会使用eval
:
timer = setTimeout(onAir,60000);
Run Code Online (Sandbox Code Playgroud)
是的,你可以打电话clearTimeout(timer)
,但有一些边缘情况可能会导致问题.
如果timer
之前已经设置了一些其他整数值,那么你可能会杀死一个完全不相关的计时器.
setTimeout
只返回计时器的整数索引.如果您不确定之前是否设置了计时器,可以在调用之前添加一个检查clearTimeout
:
if (window.timer)
{
clearTimeout(timer);
}
...
timer = setTimeout(onAir, duration);
Run Code Online (Sandbox Code Playgroud)
可能污染定时器变量的解决方案是使用闭包:
(function(){
var timer,
duration;
duration = 60000;
window.onAir = function onAir(){
...code...
if (timer){
clearTimeout(timer);
}
timer = setTimeout(onAir,duration);
};
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11776 次 |
最近记录: |