1. 宏任务
1. settimeout
2. setInterval
3. MessageChannel
4. I/O,事件队列
5. setImmediate
6. script
2. 微任务
1. requestAnimationFrame
2. MutationObserver
3. Promise.[then/catch/finally]
4. process.nexTick
5. queueMicrotask
先顺序执行下去,有遇到异步任务将其放置一边,然后继续执行下面的任务,执行完同步任务后再去看异步任务中的微任务是否有执行完了的,如果有则执行,执行完后则去执行宏任务,以此来完成一次循环
示例代码
console.log(1); //1
new Promise((resolve, reject) => {
console.log(2); //2
resolve();
}).then(() => {
console.log(3) //4
});
setTimeout(() => {
console.log(4) //6
});
setTimeout(() => {
console.log(5) //7
});
new Promise((resolve, reject) => {
console.log(6); //3
resolve();
}).then(() => {
console.log(7); //5
});
new Promise((resolve, reject) => {
console.log(8);
setTimeout(() => {
console.log(9)
resolve();
});
}).then(() => {
console.log(10);
});
// 1 2 6 8 3 7 4 5 9 10