process.nexTick和setImmediate
js执行顺序
1.同步
2.nextTick
3.异步
4.setImmediate(当前事件循环结束后执行)
<script>
setImmediate(()=>{
console.log(1)
})
process.nextTick(()=>{
console.log(2)
})
console.log(3)
setTimeout(()=>{
console.log(4)
},1000)
</script>
执行结果:3 2 4 1
事件循环

<script>
setImmediate(()=>{
console.log(1)
})
process.nextTick(()=>{
console.log(2)
})
console.log(3)
setTimeout(()=>{ console.log(4)},0)
setTimeout(()=>{ console.log(5)},1000)
setTimeout(()=>{ console.log(6)},0)
console.log(7)
</script>
执行结果:3 7 2 4 6 1 5
分析:
(3 7)为同步任务,最先执行 然后执行nexTick -> 2
(4 6)为异步函数,但延时都为0,首先被执行完,放入任务队列,被事件循环发现推送到运行栈显示,当前事件循环结束,执行setImmediate -> 1 最后执行5
异步分为:宏任务与微任务
宏任务:计时器、ajax、读取文件
微任务:promise.then(里面的)
执行顺序:
- 同步任务
- process.nextTick
- 微任务
- 宏任务
- setImmediate
setImmediate(() => {
console.log(1)
})
console.log(2);
setTimeout(() => {
console.log(3)
}, 0)
setTimeout(() => {
console.log(4)
}, 1000)
console.log(5);
new Promise((resolve) => {
console.log(6);
resolve()
}).then(() => {
console.log(7);
})
process.nextTick(() => {
console.log(8);
})
执行结果:2 5 6 8 7 3 1 4

浙公网安备 33010602011771号