手动实现一个 Promise

首先看看原生Promise有哪些功能:

  1. 支持同步和异步
  2. 一个实例的状态只能变更一次
  3. 支持链式调用
  4. 如果回调函数返回了新的实例,后续的then的执行权应该交给这个实例
  5. 提供快速解决和拒绝的实例
  6. 提供批量和优先
  7. 实例内部的报错是可控的

接下来尝试实现

创新互联建站公司2013年成立,先为怀远等服务建站,怀远等地企业,进行企业商务咨询服务。为怀远企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

注释挺明了的,就不过分赘述啦,说下思路:

  1. js是同步执行的,想要实现异步,就得考虑使用缓存
  2. 在回调函数返回G_Promise实例的情况下,后续then的执行权怎么移交给这个实例?resolve和onResolved都只有一个参数,完全可以把resolve传给这个实例的then
  3. 原生Promise的错误不会暴露在外面,那就得考虑try...catch...
  4. all...then...执行的时候也能保证时机恰当,all的原理貌似也是G_Promise
这个G_Promise搞明白后,axios、fetch什么的应该都不是问题了,一个Promise的设计包含了挺多东西的哈哈,各位同学还有什么有趣的实现可以评论区交流哈^_^
网页标题:手动实现一个 Promise
转载注明:http://myzitong.com/article/dsojiis.html