Eventloop赶上Promise

Promise.resolve(1).then(() => {
  console.log('then1')
  Promise.resolve(2).then(() => {
    console.log('then3')
    Promise.resolve(3).then(()=> {
      console.log('then4')
      Promise.resolve(4).then(() => {
        console.log('then5')
        Promise.resolve(5).then(()=> {
          console.log('then6')
        })
      })
    }).then(() => {
      console.log('then7')
    })
  }).then(() => {
    console.log('then8')
  })
}).then(() => {
  console.log('then2')
}).then(() => {
  console.log('then9')
}).then(() => {
  console.log('then10')
})
    
复制代码

Ready GOpromise

Promise.resolve()至关与new Promise((resolve,reject)=>{resolve()})bash

第一轮函数

  • current task: resolve(1)是当之无愧的当即执行的一个函数
  • micro task queue: [resolve(1)的第一个then]

第二轮spa

  • current task: then1执行中,当即输出了then1以及新resolve(2)的promise
  • micro task queue: [新resolve(2)的then函数,以resolve(1)的第二个then函数]

第三轮code

  • current task: 新resolve(2)的then函数输出then3,新resolve(3)的promise和resolve(1)的第二个then函数输出then2
  • micro task queue: [新resolve(3)的then函数, resolve(2)的第二then函数, resolve(1)的第三个then函数]

第四轮string

  • current task: resolve(3)的then函数输出then4,新resolve(4)的promise,resolve(2)的第二then函数输出then8和resolve(1)的第三个then函数输出then9
  • micro task queue: [新resolve(4)的then函数,resolve(3)的第二个then函数, resolve(1)的第三个then函数]

第五轮console

  • current task: resolve(4)的then函数输出then5,新resolve(5)的promise,resolve(3)的第二then函数输出then7和resolve(1)的第三个then函数输出then10
  • micro task queue: [新resolve(5)的then函数]

第六轮class

  • current task: resolve(5)的then函数输出then6
  • micro task queue: []
相关文章
相关标签/搜索