看啥推荐读物
专栏名称: lio-mengxiang
目录
相关文章推荐
今天看啥  ›  专栏  ›  lio-mengxiang

前端急速解决异步之微任务和宏任务

lio-mengxiang  · 掘金  ·  · 2019-03-06 10:34
阅读 176

前端急速解决异步之微任务和宏任务

同步任务(宏任务,微任务),异步任务

首先看下列代码的执行结果

console.log(1)
process.nextTick(function(){
    console.log(2)
})
setTimeout(function(){
    console.log(3)
    process.nextTick(function(){
        console.log(4)
    })
})
Promise.resolve().then(function() {
    console.log(5);
}).then(function() {
    console.log(6)
});复制代码

同步任务、微任务、宏任务的执行优先级如下:

同步任务 > 微任务 > 宏任务复制代码

宏任务包括

#浏览器Node
I/O
setTimeout
setInterval
setImmediate
requestAnimationFrame

微任务包括

#浏览器Node
process.nextTick
MutationObserver
Promise.then catch finally

回到题里面

1、第一行是同步任务,优先级最高,所以第一次输出1
2、后面有nextTick,是微任务,有promise是微任务,setTimeout是宏任务,所以setTimeouut里的代码最后执行
3、那就先依次执行微任务nextTick打印了2
4、接着执行另一个微任务promise,打印了5,6
5、接着执行宏任务setTimeout,打印3
6、setTimeout里面有一个微任务,然后执行它,打印4复制代码

// 所以结果就是
1
2
5
6
3
4
复制代码





原文地址:访问原文地址
快照地址: 访问文章快照