簡體   English   中英

一個函數中的JavaScript setTimeout setInterval

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM