如何简单判断promise和setTimeout 执行顺序?

363 阅读1分钟

首先我先了解一下宏观任务和微观任务

宏观任务&微观任务
  • 宏观任务 指宿主发起的任务称为宏观任务
  • 微观任务 指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

总结:

  • 首先分析宏观任务
  • 每个宏观任务中,有多少个微观任务
  • 根据调用次序,确定宏观任务中微观任务的执行顺序
  • 根据宏观任务的触发规则和调用次序,确定宏观任务的执行顺序
  • 最后确定整个顺序

好啦,文章如此简洁,希望你可了解^_^