我想我可能会过度但我不能为我的生活理解这一点,我认为这是由于缺乏对javascript的了解
var itv=function(){
return setInterval(function(){
sys.puts('interval');
}, 1000);
}
var tout=function(itv){
return setTimeout(function(){
sys.puts('timeout');
clearInterval(itv);
}, 5500);
}
有了这两个功能,我可以打电话给
a=tout(itv());
并获得一个循环计时器,运行5.5秒,然后退出,基本上。
按照我的逻辑,这应该有效,但它根本不是
var dotime=function(){
return setTimeout(function(){
clearInterval(function(){
return setInterval(function(){
sys.puts("interval");
}, 1000);
});
}, 5500);
}
对此事的任何见解都将不胜感激。
答案 0 :(得分:7)
它无法正常工作,因为您的setInterval
将在超时后被调用!您的原始方法是正确的,您仍然可以将其包装成单个函数:
var dotime=function(){
var iv = setInterval(function(){
sys.puts("interval");
}, 1000);
return setTimeout(function(){
clearInterval(iv);
}, 5500);
};
答案 1 :(得分:4)
我认为你犯的错误是函数itv
没有返回setInterval(function(){ sys.puts('interval'); }, 1000)
它执行setInterval(function(){ sys.puts('interval'); }, 1000)
而是返回setInterval生成的ID。然后将该ID传递给clearInterval
函数以停止setInterval(function(){ sys.puts('interval'); }, 1000)
正在执行的操作。
编辑:一个可行的函数示例。
var dotime=function(){ // Start our interval and save the id var intervalId = setInterval(function(){ // This will get executed every interval sys.puts("interval"); }, 1000); // Start our timout function setTimeout(function(){ // This will get executed when the timeout happens clearInterval(intervalId); // Stop the interval from happening anymore }, 5500); }
答案 2 :(得分:1)
这是编写你的版本的另一种方法,你看到你将一个函数传递给clearInterval,你应该在那里传递一个计时器id。
var dotime=function(){
var g=function(){
var f=function(){
return setInterval(function(){
sys.puts("interval");
}, 1000);
}
clearInterval(f);
}
return setTimeout(g, 5500);
}
为了使它工作,你应该调用函数:
clearInterval(f());
或者,使用您的版本:
var dotime=function(){
return setTimeout(function(){
clearInterval(function(){
return setInterval(function(){
sys.puts("interval");
}, 1000);
}());
}, 5500);
}
免责声明:我没有对此进行测试。