今天群里发了一个关于事件队列的问题

201 阅读1分钟

问题如下:

  function testSometing() {
    console.log('2')
    return '5'
  }
  function testAsync() {
    console.log('7')
    return Promise.resolve('8')
  }
  function test() {
    console.log('1')
    new Promise(resolve => {
      resolve(Promise.resolve(testSometing()))
    }).then(val => {
      const v1 = val
      console.log(v1)
      new Promise(resolve => {
        resolve(Promise.resolve(testAsync()))
      }).then(val => {
        const v2 = val
        console.log(v2)
        // console.log(v1, v2, '5,8')
      })
    })
  }
  test()
  var promise = new Promise(resolve => {
    console.log('3')
    resolve('6')
  }) //3
  promise.then(val => console.log(val))
  console.log('4')

答案如下:1 2 3 4 6 5 7 8

具体为什么可以看看链接:juejin.cn/post/684490…

总结:

tasks 按序执行,浏览器会在 tasks 之间执行渲染。

microtasks 按序执行,在下面情况时执行:

在每个回调之后,只要没有其它代码正在运行。

在每个 task 的末尾。