PromiseA+规范的学习 以及 SSPromise(Simple Synchronous Promise)的实现
仓库地址
读前说明
- 根据 PromiseA+规范,此仓库对代码具体位置进行标记。
- 添加了部分个人觉得便于理解该实现有用的中文注释。
- 只保留了源码部分,更好的结合源码分析。更改了 promise/A+测试集的调用方式。具体实现参照另一个库 promises-tests。
- 只考虑前端会涉及的 Promise 使用。
- 添加了 SSPromise 的实现。
- 重写了 Promise.all/Promise.allSetteled 方法。(通过了 promise 库原先的测试)。
Promise 库
- 在不支持 Promise 的环境下允许你使用 Promise 的写法。而具体事件队列的功能是通过 asap 这个库提供的。
- Promise 是优雅地书写异步代码的一种方案,而非异步本身。
- 这只是一个模拟,Promise 静态方法实现存在一些边界条件问题。
SSPromise
(Simple Synchronous Promise)
缘由
- 个人在开发 vue + vuex 项目时实现的一个方法。通过该方法可以在 store.mutations 中进行数据处理,然后决定 sspromise 的状态。在具体组件中通过 sspromise.then/ .catch / .finally 进行组件内部或全局提示框的唤起等大量模块间同步调用的函数。
- 如果你对 ES6-Promise 或 Promise/A+ 比较熟悉。 相信很容易理解两者的区别。反之,该 sspromise 目录会影响你对于 promise/A+的学习,不建议参考。
功能
- 在不使用任务队列的情况下支持 new SSPromise, then, catch, finally 用法
- 不支持 resolve, reject 一个 SSPromise 实例
- 用在渲染逻辑与数据处理逻辑分离的场景。如 vue&vuex。
- 支持对单个 SSPromise 实例链式调用 then, catch, finally。
- 支持对单个 SSPromise 实例添加多个 then。
- 支持在若干时间后改变 SSPromise 实例的状态。
- 支持 SSPromise 上的静态方法 resolve, reject, all。
上述实现跟 promise 库一致,只是为了满足自身使用需求,简化了不少 PromiseA+规范需求的设定
测试方案
- npm run test: Promise/A+测试 跟 promise 这个库的代码一样,测试的是 Promise 的实现
- npm run ssp-test: SSPromise 的简单用例测试