阅读 30

node事件环学习

//node中的事件环  和浏览器中的区别
//poll 完成后 setImmediate -> setTimeout
//就是说文件操作完 一定先执行setImmedate
const fs = require('fs')
fs.readFile('./name.text',() => {
    setTimeout(() => {
        console.log('timeout')
    })
    setImmediate(() => {
        console.log('setImmedate')
    })
})

// 轮询
//timers ----  setTimeout/setInterval 一轮开始
//pending callback ----上一轮未完成的回调,无法控制
//idle,prepare ----- 内部代码执行,无法控制
//poll ---- 文件操作 fs 完成如果没有check就会执行下一轮  或者关闭
//check ---- setImmediate 文件操作fs之后执行

// process.nextTick 并不属于事件环的一部分   在本轮代码执行后执行÷
//process.nextTick 会在promise之前执行
setTimeout(() => {
    console.log(1)
    Promise.resolve().then(() =>{
        console.log('then')
    })
    process.nextTick(() => {
        console.log('nextTick')
    })
},0)
setTimeout(() => {
    console.log(2)
})
//执行的顺序时 1 nextTick then   2  


// vue的源码 nextTick 方法 描述了浏览器中常见的 宏任务和微任务
//宏任务 script标签/ui/setTimeout /setTnterval/requestAnimationFrame
//setImmedate/messageChannel 异步
//语言本身提供的 promise / MutationObserver / nextTick
复制代码
文章分类
前端
文章标签