JavaScript嵌套的setInterval

时间:2017-08-21 10:04:21

标签: javascript jquery

我想用setInterval编写嵌套的定时代码。我尝试了以下但没有来自浏览器(Chrome和FF)的任何回复:

setInterval(function() {
    console.log('1');
    setInterval(function(){
          console.log('2');
    },5000);
}, 2500);

我预计上面的代码会在开始前等待两秒半,然后记录(' 1'),然后等待五秒钟,然后记录(' 2') 。发生的事情是我没有得到两个浏览器的响应(为什么?)

第二点,我用window.alert替换了console.log。这次我得到了回复。但不是理想的。我得到的第一个响应是在2秒半之后,第二个响应是在5秒之后,但随后两个功能开始同时发生。

所以,我想要实现的目标:两个代码块,两个不同的时间间隔,并且不会同时出现两个块。

4 个答案:

答案 0 :(得分:2)

行为是你的第二个setInterval附加到第一个函数的上下文。

所以当第一个setInterval的函数结束(被清除)时,你的第二个只存在于第一个函数的上下文中,也消失了

修改

您可以使用window.setInterval( /*...*/ )代替您的第二个setInterval使其保持不变,但行为将是每2.5秒创建一个间隔,每隔5秒调用console.log(2)以便您使用#{1}}我会得到一些Interval的增长,这不是你要求的。

您可能希望使用window.setTimeout( /*...*/ )而不是第二个setInterval。行为将如下:

1(2.5秒)

1(5秒)

1(7,5秒)

2(7,5秒)//第一次嵌套

1(10秒)

2(10秒)//第二次嵌套

...

答案 1 :(得分:1)

在您的代码中,每次"外部"都会创建一个间隔。间隔运行。在下面的示例中,将创建第一个间隔,在timeout 2500ms之后,将创建第二个间隔。

setInterval(function(){
  console.log('1');
}, 2500);

setTimeout(function(){
  setInterval(function(){
    console.log('2');
  }, 5000);
}, 2500);

答案 2 :(得分:0)

如果你想只调用一次这个操作,你应该使用setTimeout而不是setInterval。 检查以下代码:



setTimeout(function() {
    console.log('1');
    setTimeout(function(){
          console.log('2');
    },5000);
}, 2500);




这将记录" 1" 2.5秒后" 2" 7.5秒后(即2.5 + 5.0)

答案 3 :(得分:0)

尝试使用此

var a=0;
setInterval(function() {
if(a==0){
 one();
  a++;
  }

  }, 2500);
 setInterval(function() {
two();
a=0;
}, 5000);
function one() {
console.log('1');
}
function two() {
 console.log('2');
 }

从移动设备中回答不能以良好的方式放置代码......好好用一个变量来运行2500设置间隔一次..我正在为你提供一个bin链接...以上代码工作