首先看看原生Promise有哪些功能:
- 支持同步和异步
- 一个实例的状态只能变更一次
- 支持链式调用
- 如果回调函数返回了新的实例,后续的then的执行权应该交给这个实例
- 提供快速解决和拒绝的实例
- 提供批量和优先
- 实例内部的报错是可控的
接下来尝试实现
创新互联建站公司2013年成立,先为怀远等服务建站,怀远等地企业,进行企业商务咨询服务。为怀远企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
注释挺明了的,就不过分赘述啦,说下思路:
- js是同步执行的,想要实现异步,就得考虑使用缓存
- 在回调函数返回G_Promise实例的情况下,后续then的执行权怎么移交给这个实例?resolve和onResolved都只有一个参数,完全可以把resolve传给这个实例的then
- 原生Promise的错误不会暴露在外面,那就得考虑try...catch...
- all...then...执行的时候也能保证时机恰当,all的原理貌似也是G_Promise
这个G_Promise搞明白后,axios、fetch什么的应该都不是问题了,一个Promise的设计包含了挺多东西的哈哈,各位同学还有什么有趣的实现可以评论区交流哈^_^
网站名称:手动实现一个 Promise
当前地址:
http://kswsj.cn/article/dsojiis.html