这篇文章真的是好文。讲的很清楚,看完以后更深一步的明白了事宜轮回机制。
简短的概述下总结
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