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 GO

Promise.resolve()相当与new Promise((resolve,reject)=>{resolve()})

第一轮

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

第二轮

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

第三轮

  • 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函数]

第四轮

  • 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函数]

第五轮

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

第六轮

  • current task: resolve(5)的then函数输出then6
  • micro task queue: []

转载于:https://juejin.im/post/5cfdd11e6fb9a07eb94f7fe1

猜你喜欢

转载自blog.csdn.net/weixin_34290352/article/details/91420237
今日推荐