执行顺序
同步任务 —> 微任务 ——> 宏任务
微任务和 宏任务 都属于异步任务
常见的微任务:promise.then()
,promise.catch()
,process.nextTick()
,new MutaionObserver()
常见的宏任务:setTimeout()
,setInterval()
,setImmediate()
举例:
console.log(1)
new Promise((resolve,reject) =>{
console.log(2)
setTimeout(()=>{
console.log(3)
},0)
for(let i=0;i<1000;i++){
resolve()
}
reject()
console.log(4)
})
.then(() => {
console.log(5)
})
.catch(()=>{
console.log(7)
})
setTimeout(
(function(){
console.log(6)
})(),0
)
这题打印顺序是 1 2 4 6 5 3
1 2 4 6都是同步任务,在异步任务之前执行
6这里 虽然是定时器,但是 setTimeout第一个参数必须是需要编译的代码或者是一个函数方法,这里是可执行代码(function(){})()
,所以会立即执行,相当于同步任务
5是微任务,3是宏任务