手写 promise 的问题

看了好几篇教程,都有一个地方不太理解,以这篇文章中的代码为例,在 promise 处理程序那里,为什么 fulfilled 和 rejected 都可以直接 resolve 或 reject,而 pending 需要再走一遍处理程序?

上图中 x.state === "pending" 那里为什么不能写成下面这样呢

 if (x instanceof Promise) {
    // ...
    if (x.state === "pending") {
      x.then(resolve, reject); 
    }
    // ...
    return;
  }
阅读 1.9k
2 个回答

这是一个递归,注释已经说明了,如果判断为pending状态,我们不会返回最终结果,而是再次调用函数,直到结果为fulfilled或rejected才返回。

你下面这种写法不能兼容到调用 resolve 时传入一个新的 promise 的场景,原逻辑能保证即使 resolve 传入了一个 promise,也能为这个 promise 添加上 then 来进行后续的迭代~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题