
正文
手动实现一个 Promise
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
首先看看原生Promise有哪些功能:接下来尝试实现注释挺明了的,就不过分赘述啦,说下思路:
首先看看原生Promise有哪些功能:
- 支持同步和异步
- 一个实例的状态只能变更一次
- 支持链式调用
- 如果回调函数返回了新的实例,后续的then的执行权应该交给这个实例
- 提供快速解决和拒绝的实例
- 提供批量和优先
- 实例内部的报错是可控的
接下来尝试实现

注释挺明了的,就不过分赘述啦,说下思路:
- js是同步执行的,想要实现异步,就得考虑使用缓存
- 在回调函数返回G_Promise实例的情况下,后续then的执行权怎么移交给这个实例?resolve和onResolved都只有一个参数,完全可以把resolve传给这个实例的then
- 原生Promise的错误不会暴露在外面,那就得考虑try...catch...
- all...then...执行的时候也能保证时机恰当,all的原理貌似也是G_Promise
- 支持同步和异步
- 一个实例的状态只能变更一次
- 支持链式调用
- 如果回调函数返回了新的实例,后续的then的执行权应该交给这个实例
- 提供快速解决和拒绝的实例
- 提供批量和优先
- 实例内部的报错是可控的
接下来尝试实现

注释挺明了的,就不过分赘述啦,说下思路:
- js是同步执行的,想要实现异步,就得考虑使用缓存
- 在回调函数返回G_Promise实例的情况下,后续then的执行权怎么移交给这个实例?resolve和onResolved都只有一个参数,完全可以把resolve传给这个实例的then
- 原生Promise的错误不会暴露在外面,那就得考虑try...catch...
- all...then...执行的时候也能保证时机恰当,all的原理貌似也是G_Promise

注释挺明了的,就不过分赘述啦,说下思路:
- js是同步执行的,想要实现异步,就得考虑使用缓存
- 在回调函数返回G_Promise实例的情况下,后续then的执行权怎么移交给这个实例?resolve和onResolved都只有一个参数,完全可以把resolve传给这个实例的then
- 原生Promise的错误不会暴露在外面,那就得考虑try...catch...
- all...then...执行的时候也能保证时机恰当,all的原理貌似也是G_Promise
- js是同步执行的,想要实现异步,就得考虑使用缓存
- 在回调函数返回G_Promise实例的情况下,后续then的执行权怎么移交给这个实例?resolve和onResolved都只有一个参数,完全可以把resolve传给这个实例的then
- 原生Promise的错误不会暴露在外面,那就得考虑try...catch...
- all...then...执行的时候也能保证时机恰当,all的原理貌似也是G_Promise








