手写 Promise 核心原理,完整的 Promises/A+ 实现,通过了 Promises/A+ 官方872个测试用例测试,根据规范实现了 ES6+ 的全部 API,包括处于 TC39 第四阶段草案的 Promise.any()。
仓库中包含的几个版本:
-
myPromise.js (Promise 核心原理的实现,通过了 Promises/A+ 官方872个测试用例测试)
-
myPromiseNotes.js (myPromise.js 的注释版本)
-
myPromiseFully.js (在 myPromise.js 基础上,根据规范实现了 Promise ES6+ 的全部 API)
- Promise.resolve
- Promise.reject
- Promise.prototype.catch
- Promise.prototype.finally
- Promise.all
- Promise.allSettled
- Promise.any
- Promise.race
手写 Promise 详细的教程在这里:
- JavaScript 深入系列之 Promise 核心原理的模拟实现,通过 Promises/A+ 官方测试
- JavaScript 深入系列之 Promise 实例方法 catch 和 finally 的模拟实现
- JavaScript 深入系列之 Promise 静态方法 resolve、reject、all、allSettled、any 和 race 的模拟实现
如何证明我们写的myPromise
就符合 Promises/A+ 规范呢?
跑一下 Promises/A+ 测试 就好啦~
我们使用Promises/A+官方的测试工具 promises-aplus-tests 来对我们的myPromise
进行测试
安装 promises-aplus-tests
:
npm install promises-aplus-tests -D
我们实现了deferred
方法,也通过 CommonJS 对外暴露了myPromise
,最后配置一下package.json
就可以跑测试啦~😺
新建一个 package.json
,配置如下:
package.json
{
"devDependencies": {
"promises-aplus-tests": "^2.1.2"
},
"scripts": {
"test": "promises-aplus-tests myPromise"
}
}
-
上面的配置 执行
npm run test
,将会测试 myPromise.js。 -
如果希望测试注释版本 myPromiseNotes.js,则把 package.json 改为下面配置即可:
{
"devDependencies": {
"promises-aplus-tests": "^2.1.2"
},
"scripts": {
"test": "promises-aplus-tests myPromiseNotes"
}
}
执行测试命令:
npm run test
来看看我们的测试结果,走起 🚀
Promises/A+ 官方测试总共872用例,我们手写的Promise完美通过了所有用例 🎉🎉🎉:
- JavaScript 深入系列
- JavaScript 专题系列
- JavaScript 基础系列
- 网络系列
- 浏览器系列
- 性能优化与网络安全系列
- Webpack 系列
- Vue 系列
- HTML 应知应会系列
- CSS 应知应会系列
各系列文章汇总:https://github.com/yuanyuanbyte/Blog
我是圆圆,一名深耕于前端开发的攻城狮。