【Promise 源码学习】第九篇 - Promise.resolve 和 Promise.reject 的实现
一,前言
上一篇,完善了 Promise 源码并通过 promise-aplus-tests 测试,主要涉及以下几个点:
完善了 Promise 源码:支持两种嵌套 promise 的情况;
分析了 Promise 的执行过程;
创建延迟对象并通过 promise-aplus-tests 测试;
本篇,继续实现 Promise 的两个静态 API(类方法) Promise.resolve
和 Promise.reject
;
二,前文回顾
在前面几篇,根据 Promise A+ 规范手写了 Promise 源码并通过了 promise-aplus-tests 测试;
在第二篇中,已经对 Promise 静态 API 的使用进行了简单介绍;
** 或**:
静态 API 或类方法:不需要 new 出实例就可以使用的静态方法;
Promise 有 3 个实例 API(原型方法):new Promise 实例才能使用;
then
catch
finally
Promise 有 4 个静态 API(类方法):无需实例化,可直接使用;
resolve
reject
all
race
接下来,实现两个简单的 Promise 静态 API:Promise.resolve
和 Promise.reject
;
三,Promise.resolve
的实现
1,测试原生的 Promise.resolve
Promise.resolve
中有可能处理同步逻辑,也有可能处理异步逻辑:
Promise.resolve
执行同步操作:
Promise.resolve
执行异步操作:
Promise 的 resolve 中是一个 promise 对象时,会等待 promise 异步操作执行完毕;
2,原理分析
从执行结果看,Promise.resolve
返回的就是一个成功的 promise,等价于:
3,测试手写的Promise.resolve
使用相同代码测试,由于尚未实现静态方法Promise.resolve
,所以会报错:
4,实现 Promise.resolve
在 Promise 类中,添加静态方法 Promise.resolve();
通过静态方法 Promise.resolve,返回了一个成功的 promise 对象;
四,Promise.reject
的实现
与 Promise.resolve() 相似,Promise.reject 会创建一个失败的 promise;
1,测试原生的 Promise.reject
2,原理分析
Promise 的 reject 中是一个 promise 对象时,就不会等待 promsie 异步操作执行完毕,会直接返回;
由于 Promise.reject
会创建一个失败的 promise,promise 一旦失败后就会直接返回;
所以,不会等到 1 秒后再返回,而是直接返回了 PENDING 态的 promise;
3,测试手写的 Promise.reject
使用相同代码测试,由于尚未实现静态方法Promise.reject
,所以会报错:
4,实现 Promise.reject
在 Promise 类中,添加静态方法 Promise.reject();
五,结尾
本篇,主要实现了 Promise 的两个静态 API(类方法):Promise.resolve
和 Promise.reject
Promise.resolve
创建并返回一个成功的 promise;Promise.reject
创建并返回一个失败的 promise;Promise.resolve
会等待异步操作完成;Promise.reject
失败会直接返回;
下一篇,继续实现 Promise 两个实例 API(原型方法):Promise.prototype.catch
和 Promise.prototype.finally
;
评论