事件循环event loop


const promise = new Promise((resolve, reject) => {
    console.log(1);
    resolve();
    console.log(2);
})
promise.then(() => {
    console.log(3);
})
console.log(4);
以上输出结果为1243
首先Promise新建后立即执行,所以会先输出1,2,而Promise.then()内部的代码在当次事件循环的结尾立即执行,所以会先输出4,最后输出3.

事件循环里面有宏任务和微任务:
宏任务有setTimeout、setInterval、 setImmediate、script(整体代码)、 I/O 操作等
微任务有process.nextTick、new Promise().then(回调)

Node与浏览器的 Event Loop 差异:
node11及之后与浏览器保持一致,先执行一个宏任务,宏任务执行完把当前的微任务清空
node10及之前允许多个宏任务先执行,然后再按顺序清空宏任务对应的微任务队列
setTimeout(()=>{
    console.log('timer1')
    Promise.resolve().then(function() {
        console.log('promise1')
    })
}, 0)
setTimeout(()=>{
    console.log('timer2')
    Promise.resolve().then(function() {
        console.log('promise2')
    })
}, 0)

  在浏览器中执行输出:timer1 promise1 timer2 promise2

  node10执行输出:timer1 timer2 promise1 promise2

  node11执行输出:timer1 promise1 timer2 promise2与浏览器保持一致

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM