super-fool / blog

珍藏经典, 分享思想, 共同进步.加油
3 stars 0 forks source link

宏任务&微任务 #85

Open super-fool opened 3 years ago

super-fool commented 3 years ago

异步任务

每一个异步任务都包含一个或多个回调函数(callback), 并且会有一个异步队列存储所有的异步任务.

宏任务

属于浏览器的异步任务: setTimeout, setInterval, AJAX, I/O

JS主线程也属于宏任务

微任务

属于JS的异步任务: Promise, async/await,process.nextTick

任务顺序

同步任务 > 微任务 > 宏任务

console.log(1);
setTimeout(()=>console.log(2), 0);
setTimeout(()=>{
    Promise.resolve().then(()=>console.log(3));
}
, 0);
setTimeout(()=>console.log(4), 2000);
new Promise(resolve=>{
    console.log(5);
    resolve();
}
).then(()=>console.log(6));
console.log(7);

// 1, 5, 7, 6, undefined, 2, 3, 4
super-fool commented 3 years ago

参考: https://zhuanlan.zhihu.com/p/257069622