![](/img/trans.png)
[英]How to use setTimeOut and setInterval in one function in javascript
[英]JavaScript setTimeout setInterval within one function
我想我可能會過度但我不能為我的生活理解這一點,我認為這是由於缺乏對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);
}
任何有關此事的見解將不勝感激。
它無法工作,因為你的setInterval
將在超時setInterval
調用! 您的原始方法是正確的,您仍然可以將其包裝成單個函數:
var dotime=function(){
var iv = setInterval(function(){
sys.puts("interval");
}, 1000);
return setTimeout(function(){
clearInterval(iv);
}, 5500);
};
我認為你犯的錯誤是函數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); }
這是編寫你的版本的另一種方法,你看到你將一個函數傳遞給clearInterval,你應該在那里傳遞一個timer 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);
}
免責聲明:我沒有測試過這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.