宏任务,微任务是存在于整个js中的。
宏任务定义:script,setTimeout,setInterval
微任务定义:Promise,process.nextTick()
setTimeout(function(){
console.log('setTimeout')
});
new Promise(function(resolve){
console.log('Promise');
resolve();
}).then(function(){
console.log('then')
});
console.log('console');
在解析这段代码之前我们需要先了解js的运行机制,js是单线程的,为了提高代码执行效率,js中有主线程和异步队列。
我们在执行上面这段代码是,从上往下开始:
① setTimeout延时器,直接进入异步队列;
② 遇到promise属于微任务,promise.then的输出结果进入Event Queue,newPromise直接执行,输出Promise;
③ 继续向下直接执行输出console
④ 主线程宏任务执行完成,进入微任务执行promise.then的结果输出then;
⑤ 主线程任务执行完毕,进入异步队列,宏任务直接执行setTimeout输出setTimeout。