blog
blog copied to clipboard
nodeJS 定时器函数和nextick的区别
在nodeJS中,有3个开启定时器的函数,分别是setTimeout, setInterval, setImmediate; 在加上noTickde的process.nextTick,一共提供了4种异步执行代码的方式,有什么区别呢?
执行顺序
首先通过代码来分析
setTimeout(function(){
console.log('setTimeout 1')
})
process.nextTick(function(){
console.log("nextTick延迟执行2");
});
process.nextTick(function(){
console.log("nextTick延迟执行1");
});
setImmediate(function(){
console.log("setImmediate延迟执行2");
});
//加入两个setImmediate()回调函数
setImmediate(function(){
console.log("setImmediate延迟执行1");
process.nextTick(function(){
console.log("强势插入");
});
});
process.nextTick(function(){
console.log("nextTick延迟执行3");
});
process.nextTick(function(){
console.log("nextTick延迟执行4");
});
setTimeout(function(){
console.log('setTimeout 2')
})
var count=1,
interval=setInterval(function(){
if(count<5) {
count++;
console.log('setInterval ')
}else {
clearInterval(interval)
}
})
console.log("正常执行");
最终的执行结果
正常执行
nextTick延迟执行2
nextTick延迟执行1
nextTick延迟执行3
nextTick延迟执行4
setTimeout 1
setTimeout 2
setInterval
setImmediate延迟执行2
setImmediate延迟执行1
强势插入
setInterval
setInterval
setInterval
然后通过修改相应代码的位置,可以得出如下结果:
- setTimeout 和setInterval的时间执行顺序和代码的先后位置有关系
- process.nextTick的执行优先级是最高的
- setImmediate总是在当前代码执结束之后才执行
- 多个 setImmediate并没有如其他同学介绍的那般,会分开多次执行