首先我先了解一下宏观任务和微观任务
宏观任务&微观任务
- 宏观任务 指宿主发起的任务称为宏观任务
- 微观任务 指JavaScript 引擎发起的任务
- 许多的微观任务的队列组成了宏观任务
- 微观任务始终先于宏观任务执行
promise & setTimeout
promise 是javascript引擎发起的微观任务
setTimeout 是浏览器 API,产生宏观任务
嗖:不管setTimeout执行在什么位置,都在promise之后执行
eq:
setTimeout(()=>console.log("d"), 0)
var r = new Promise(function(resolve, reject){
resolve()
});
r.then(() => {
var begin = Date.now();
while(Date.now() - begin < 1000);
console.log("c1")
new Promise(function(resolve, reject){
resolve()
}).then(() => console.log("c2"))
});
// c1
// c2
// Promise.{<resolved>: undefined}
// d
总结:
- 首先分析宏观任务
- 每个宏观任务中,有多少个微观任务
- 根据调用次序,确定宏观任务中微观任务的执行顺序
- 根据宏观任务的触发规则和调用次序,确定宏观任务的执行顺序
- 最后确定整个顺序
好啦,文章如此简洁,希望你可了解^_^