我想用setInterval编写嵌套的定时代码。我尝试了以下但没有来自浏览器(Chrome和FF)的任何回复:
setInterval(function() {
console.log('1');
setInterval(function(){
console.log('2');
},5000);
}, 2500);
我预计上面的代码会在开始前等待两秒半,然后记录(' 1'),然后等待五秒钟,然后记录(' 2') 。发生的事情是我没有得到两个浏览器的响应(为什么?)
第二点,我用window.alert替换了console.log。这次我得到了回复。但不是理想的。我得到的第一个响应是在2秒半之后,第二个响应是在5秒之后,但随后两个功能开始同时发生。
所以,我想要实现的目标:两个代码块,两个不同的时间间隔,并且不会同时出现两个块。
答案 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链接...以上代码工作