setInterval定时器的问题
一般js进行循环任务的时候才用两种方式 setTimeout 和 setInterval ,两种方式上理论上是可以进行切换的。但遇到某些地方会出现两种情况。
- 运行时间超过任务循环时间的情况
运行时间超过任务循环时间
当规定一个任务每隔1s触发,但是运行任务占用了2s,由于js是单线程的语言,因此下一个任务会在当前运行了1s就进入任务等待队列。
运行任务结束后已有两个任务准备立即运行。如果两个任务的运行时间非常短的话,会造成连续触发。
下面是模拟任务时间不同且有部分运行时间超过定时时间的例子
var i = 0 , j = 0,
lastEndTime = 0,
_timeid = setInterval(function(){
var startTime = new Date();
if(lastEndTime > 0){
console.log('-----------period : ' + (startTime - lastEndTime));
}
if(i++ == 10){
clearInterval(_timeid);
}