Merge branch ‘release/2.1.0’
吾王的移动端的 Promise/A+ 实现,兼容 node 环境,遵循 1.1 规范
移动端环境下通过 edp 引入模块:
$ edp import saber-promise
node 环境下通过 npm 引入模块:
npm
$ npm install saber-promise --save
var Resolver = require('saber-promise'); function doSomeThing() { var resolver = new Resolver(); // 做一些异步操作 doSync( function (result) { // 异步操作成功了 resolver.fulfill(result); }, function () { // 异步操作失败了 resolver.reject('connect error'); } ); // 返回Promise对象 return resolver.promise(); } doSomeThing() // 对异步结果进行处理 .then( // 处理成功的情况 function (result) { console.log(result); }, // 处理失败的情况 function (reason) { console.log(reason); } ) // 不管成功还是失败都提示操作成功 .then(function () { console.log('操作完成') });
规范要求捕获并处理所有的异常(#2.2.7.2),在项目开发中可能会经常遇到非预期的异常被自动处理而导致无从跟踪,这些错误基本都是程序级别的书写错误而非可预期的业务逻辑错误,一般都不会有相应的 reject 处理。针对这种情况提供了全局事件:reject 与 resolve 来监控处理(需要先调用 Resolver.enableGlobalEvent() 启用全局事件),更暴力一些还可以在 开发环境 中使用 Resolver.disableExceptionCapture() 来直接关闭异常处理,方便查找问题。
reject
resolve
Resolver.disableExceptionCapture()
警告 异常相关的 API 都是非标准的,只建议在调试阶段使用,这些 API 在未来某版本中可能会被废除
创建Promise对象
Promise
{Function}
{Promise}
var promise = Resolver.promise(function (resolver) { setTimeout(function () { resolver.resolve(); }, 0); }); promise.then(function () { ... });
创建已经处于 fulfilled 状态的 Promise 对象
fulfilled
{*}
创建已经处于 fulfilled 状态的 Promise 对象,与 fulfilled 完全相同,别名而已…
创建已经处于 rejected 状态的 Promise 对象
rejected
关联多个 Promise 对象并返回一个新的 Promise 对象,返回的 Promise 在所有被关联的 Promise 对象都 fulfilled 时达到 fulfilled 状态,如果有任意 promise 对象 rejected 则立即达到 rejected 状态
promise
{Array.<promise>|...promise}
关联多个 Promise 对象并返回一个新的 Promise 对象,关联的 Promise 对象中有任意一个 Promise 被解决(fulfilled)或拒绝(rejected)后,新返回的 Promise 对象立刻以相同的解决值被解决或以相同的拒绝原因被拒绝。
非标准API 启动全局事件
{Object}
全局事件是默认关闭的,saber-promise 不强依赖于 saber-emitter 或者任何其它事件发射器,所以在开启全局事件时需要传入一个事件发射器来启用自定义事件,建议使用 saber-emitter,如下:
saber-promise
var Emitter = require('saber-emitter'); Resolver.enableGlobalEvent(Emitter); // resolved事件 Resolver.on('resolve', function (data) { ... }); // rejected事件 Resolver.on('reject', function (reason) { ... });
非标准 API
禁用异常处理,默认时启动的。如果全局事件都不想监控了,用这个可以直接关闭异常处理,方便调试,简单粗暴~
启用异常处理
注册任何全局事件前需要先启用全局事件,具体请参考 enableGlobalEvent(Emitter)
resolved事件 任何 Resolver 对象处于 fulfilled 时触发
rejected事件 任何 Resolver 对象处于 rejected 时触发
使用Promises/A+规范的 Test Suite
$ npm install $ npm test
基本性能测试请参考这里
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
saber-promise
吾王的移动端的 Promise/A+ 实现,兼容 node 环境,遵循 1.1 规范Installation
移动端环境下通过 edp 引入模块:
node 环境下通过
npm引入模块:Usage
About Exception
规范要求捕获并处理所有的异常(#2.2.7.2),在项目开发中可能会经常遇到非预期的异常被自动处理而导致无从跟踪,这些错误基本都是程序级别的书写错误而非可预期的业务逻辑错误,一般都不会有相应的
reject处理。针对这种情况提供了全局事件:reject与resolve来监控处理(需要先调用 Resolver.enableGlobalEvent() 启用全局事件),更暴力一些还可以在 开发环境 中使用Resolver.disableExceptionCapture()来直接关闭异常处理,方便查找问题。警告 异常相关的 API 都是非标准的,只建议在调试阶段使用,这些 API 在未来某版本中可能会被废除
API
Methods
promise(fn)
创建
Promise对象{Function}构造函数,第一个参数是 Resolver 对象{Promise}Promise 对象fulfilled(data)
创建已经处于
fulfilled状态的 Promise 对象{*}数据{Promise}Promise 对象resolved(data)
创建已经处于
fulfilled状态的 Promise 对象,与 fulfilled 完全相同,别名而已…{*}数据{Promise}Promise 对象rejected(reason)
创建已经处于
rejected状态的 Promise 对象{*}失败原因{Promise}Promise 对象all(promises)
关联多个 Promise 对象并返回一个新的
Promise对象,返回的Promise在所有被关联的Promise对象都fulfilled时达到fulfilled状态,如果有任意promise对象rejected则立即达到rejected状态{Array.<promise>|...promise}待关联的Promise对象,可以是数组参数或者多个Promise对象{Promise}Promise 对象race(promises)
关联多个 Promise 对象并返回一个新的
Promise对象,关联的Promise对象中有任意一个Promise被解决(fulfilled)或拒绝(rejected)后,新返回的Promise对象立刻以相同的解决值被解决或以相同的拒绝原因被拒绝。{Array.<promise>|...promise}待关联的Promise对象,可以是数组参数或者多个Promise对象{Promise}Promise 对象enableGlobalEvent(Emitter)
非标准API 启动全局事件
{Object}事件发射器全局事件是默认关闭的,
saber-promise不强依赖于 saber-emitter 或者任何其它事件发射器,所以在开启全局事件时需要传入一个事件发射器来启用自定义事件,建议使用 saber-emitter,如下:disableExceptionCapture()
非标准 API
禁用异常处理,默认时启动的。如果全局事件都不想监控了,用这个可以直接关闭异常处理,方便调试,简单粗暴~
enableExceptionCapture()
非标准 API
启用异常处理
Events
注册任何全局事件前需要先启用全局事件,具体请参考 enableGlobalEvent(Emitter)
resolve
resolved事件 任何 Resolver 对象处于
fulfilled时触发{*}数据reject
rejected事件 任何 Resolver 对象处于
rejected时触发{*}失败原因Classes
Test
使用Promises/A+规范的 Test Suite
基本性能测试请参考这里