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(里面的)

执行顺序:

  1. 同步任务
  2. process.nextTick
  3. 微任务
  4. 宏任务
  5. 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

 

posted @ 2022-04-22 15:35  TM_cc  阅读(113)  评论(0)    收藏  举报