连系microtask和macrotask明白event-loop

这篇文章真的是好文。讲的很清楚,看完以后更深一步的明白了事宜轮回机制。

http://www.jianshu.com/p/12b9…

简短的概述下总结

setTimeout是一个宏使命源,写在内里的回调函数会加到宏使命行列中。

Promise是一个微使命源,写在内里resolve以及reject回调会被加到微使命行列中。

事宜轮回能够分为如许的一个历程:分别是 宏使命->实行栈->微使命

setTimeout(function() {
    console.log('timeout1');
})

new Promise(function(resolve) {
    console.log('promise1');
    for(var i = 0; i < 1000; i++) {
        i == 99 && resolve();
    }
    console.log('promise2');
}).then(function() {
    console.log('then1');
})

console.log('global1');

比方上面如许的一段代码,setTimeout是一个宏使命源,所以内里的回调函数console.log('timeout1');会被加到宏使命行列中。到了Promise,输出promise1以及promise2,比及for轮回终了后,实行resolve,因为Promise是一个微使命源,所以console.log('then1');回调会被加到微使命行列中。继承实行代码,输出grobal1。这个时刻,实行栈上的代码已实行终了,所以此时我们实行微使命行列,此时的微使命行列上有console.log('then1');,所以浏览器输出then1。至此,一轮的事宜轮回已实行终了,开启新的一轮事宜轮回。也是从宏使命->实行栈->微使命。因为此时宏使命上有事宜console.log('timeout1');,所以输出timeout1。这就是整段代码实行情况的明白。顺次输出以下:

promise1
promise2
global1
then1
timeout1
    原文作者:上啊比卡丘
    原文地址: https://segmentfault.com/a/1190000008866165
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞