- 微任务:Promise,async/await,process.nextTick
- dom
- 宏任务:包括整体代码script,setTimeout,setInterval
微任务、宏任务会进入到不同的event queue。比如setTimeout和setInterval会进入相同的Event Queue。
在一个event loop,先执行微任务的queue,在执行dom,最后宏任务的queue
遇到 console 立即执行
首先会遇到setTimeout,将其放到宏任务event queue里面
然后回到 promise , new promise 会立即执行, then会分发到微任务
console.log("1")
setTimeout(()=>{
console.log("2")
})
new Promise((resolve) => {
resolve()
console.log("3")
}).then(()=>{
console.log("4")
}).finally(()=>{
console.log("5")
})
console.log("6")
输出1 3 6 4 5 2
第二个例子
console.log("1");
setTimeout(() => {
console.log("7");
Promise.resolve().then(() => {
console.log("9");
});
new Promise((resolve, reject) => {
console.log("8");
resolve("10");
setTimeout(() => {
console.log("14");
})
}).then((data) => {console.log(data)});
});
new Promise((resolve, reject) => {
console.log("2");
resolve("4");
setTimeout(() => {
console.log("11");
})
}).then((data) => {
console.log(data);
setTimeout(() => {
console.log("12");
})
Promise.resolve("5").then((d) => {
console.log(d);
Promise.resolve("6").then((d) => {
console.log(d);
});
});
setTimeout(() => {
console.log("13");
})
})
console.log("3");
输出:
1 2 3 4 5 6 7 8 9 10 11 12
示意图
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。