美文网首页
js 宏任务和微任务

js 宏任务和微任务

作者: 叫我苏轼好吗 | 来源:发表于2019-07-25 15:17 被阅读0次

    1:主线程

    image.png

    2:.宏任务(macrotask )和微任务(microtask )


    image.png

    最后看个例子:

    setTimeout(() => {
        //执行后 回调一个宏事件
        console.log('内层宏事件3')
    }, 0)
    console.log('外层宏事件1');
    
    new Promise((resolve) => {
        console.log('外层宏事件2');
        resolve()
    }).then(() => {
        console.log('微事件1');
    }).then(()=>{
        console.log('微事件2')
    })
    
    外层宏事件2
    微事件1
    微事件2
    内层宏事件3
    

    分析

    • 首先浏览器执行js进入第一个宏任务进入主线程, 遇到 setTimeout 分发到宏任务Event Queue中

    • 遇到 console.log() 直接执行 输出 外层宏事件1

    • 遇到 Promise, new Promise 直接执行 输出 外层宏事件2

    • 执行then 被分发到微任务Event Queue中

    •第一轮宏任务执行结束,开始执行微任务 打印 '微事件1' '微事件2'

    •第一轮微任务执行完毕,执行第二轮宏事件,打印setTimeout里面内容'内层宏事件3'

    变化

    setTimeout(() => {
        //执行后 回调一个宏事件
    
     new Promise((resolve) => {
        console.log('时间');
        resolve()
     }).then(() => {
        console.log('微事件1');
    }).then(()=>{
        console.log('微事件2')
    })
        console.log('内层宏事件3')
    }, 0)
    console.log('外层宏事件1');
    
    new Promise((resolve) => {
        console.log('外层宏事件2');
        resolve()
    }).then(() => {
        console.log('微事件1');
    }).then(()=>{
        console.log('微事件2')
    })
    
    输出什么???

    相关文章

      网友评论

          本文标题:js 宏任务和微任务

          本文链接:https://www.haomeiwen.com/subject/csyhrctx.html