手动实现一个Promise

  • 手动实现一个Promise已关闭评论
  • 26 次浏览
  • A+
所属分类:Web前端

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

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

接下来尝试实现

手动实现一个Promise

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

  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的设计包含了挺多东西的哈哈,各位同学还有什么有趣的实现可以评论区交流哈^_^