极客时间对于推广渠道会有返利优惠,比如山月在极客时间买了一门课,再把课程分享给好友购买,这时极客时间会向山月返利20元左右。
而我现在做了一个返利平台,你可以在上边通过山月的链接购买课程,此时极客时间会向我返利。为了共同学习,而你可以添加我的微信 (shanyue94),我将把极客时间给我的返利发一个红包全部返给你

# 关于事件循环,仅有 Promise,判断以下代码输出

更多描述

代码见 Promise 事件循环代码输出顺序题目 - CodePen (opens new window)

Promise.resolve(console.log(0))
  .then(() => {
    console.log(1);
    Promise.resolve(console.log(5))
      .then(() => console.log(3))
      .then(() => console.log(4))
      .then(() => console.log(6))
  })
  .then(() => console.log(2))
  .then(() => console.log(7))

Issue

欢迎在 Issue 中交流与讨论: Issue 624 (opens new window)

Author

回答者: xjxujing (opens new window)

为了方便说明执行思路,把箭头函数换成了普通函数,起了名字,然后加上默认返回值 return undefined

Promise.resolve(console.log(0))
    .then(function F1() {
      console.log(1);
      Promise.resolve(console.log(5))
        .then(function F3() {
          console.log(3)
          return undefined
        })
        .then(function F4() {
          console.log(4)
          return undefined
        })
        .then(function F6() {
          console.log(6)
          return undefined
        })

      return undefined
    })
    .then(function F2() {
      console.log(2)
      return undefined
    })
    .then(function F7() {
      console.log(7)
      return undefined
    })

执行过程: 打印 0, F1 放入 microtask 调用栈空了, 从 microtask 拿 F1 执行 打印 1, 遇到 Promise.resolve 打印 5, 遇到 then, F3 放入 microtask 继续执行同步的代码 也就是 return undefined, 然后看到 then 然后把 F2 放入 microtask 调用栈空了, 从 microtask 按顺序拿 F3 执行 打印 3, 再遇到 return undefined, 然后看到 then, 再把 F4 放入 microtask 从 microtask 按顺序拿 F2 执行 打印 2, 再遇到 return undefined, 然后看到 then, 再把 F7 放入 microtask 从 microtask 按顺序拿 F4 执行 打印 4, 再遇到 return undefined, 然后看到 then, 再把 F6 放入 microtask 从 microtask 按顺序拿 F7 执行 打印 7 再遇到 return undefined, 没有 then 了 从 microtask 按顺序拿 F6 执行 打印 6

画个图大概是这样: image

关于山月

我的项目:
我的微信:shanyue94,欢迎交流
Last Updated: 7/25/2021, 7:03:19 AM