队列执行顺序

145 阅读1分钟
/**
 * 宏任务(Macrotask)
 * setTimeout/setInterval
 * MessageChannel
 * I/O,事件队列
 * setImmediate(Node环境)
 * script(整体代码块)
 *
 * 微任务(Microtask)
 * requestAnimationFrame(有争议)
 * MutationObserver(浏览器环境)
 * Promise.[ then/catch/finally ]
 * process.nextTick(Node环境) nextTick 队列会比 Promie 队列先执行
 * queueMicrotask
 */
function foo() {
  console.log('foo 1');
  pro().then(res => {
    console.log(res);
  })
  setTimeout(() => {
    bar()
    pro1().then(res => {
      console.log(res);
    })
  }, 0)
  console.log('foo 2');
}

function bar() {
  console.log('bar 1');
}

function pro() {
  return new Promise((resolve, reject) => {
    console.log('pro 1');
    resolve('pro 2')
    console.log('pro 3');
  })
}
function pro1() {
  return new Promise((resolve, reject) => {
    console.log('pro1 1');
    resolve('pro1 2')
    console.log('pro1 3');
  })
}

foo()
// foo 1
// pro 1
// pro 3
// foo 2
// pro 2
// bar 1
// pro1 1
// pro1 3
// pro1 2