- Getting Started
- edpx-mobile v1.0.0
- rebas
- rider
- saber-ajax
- saber-cookie
- saber-dom
- saber-emitter
- saber-env
- saber-fastbutton
- saber-firework
- saber-firework v2.0.0
- saber-firework v2.0.0-beta.2
- saber-firework v2.0.0-beta.1
- saber-firework v2.0.0-alpha.2
- saber-firework v2.0.0-alpha.1
- saber-firework v1.0.0
- saber-firework v0.4.2
- saber-firework v0.4.1
- saber-firework v0.4.0
- saber-firework v0.3.2
- saber-firework v0.3.1
- saber-firework v0.3.0
- saber-firework v0.2.6
- saber-firework v0.2.5
- saber-firework v0.2.4
- saber-firework v0.2.1
- saber-firework v0.2.0
- saber-firework v0.1.0-beta.4
- saber-firework v0.1.0-beta.3
- saber-firework v0.1.0-beta.1
- saber-geo v0.1.0
- saber-lang
- saber-log v0.1.0
- saber-matchmedia
- saber-mm
- saber-promise
- saber-promise v2.1.0
- saber-promise v2.0.0
- saber-promise v2.0.0-beta.1
- saber-promise v2.0.0-alpha.3
- saber-promise v2.0.0-alpha.2
- saber-promise v2.0.0-alpha.1
- saber-promise v1.0.2
- saber-promise v1.0.0
- saber-promise v0.1.2
- saber-promise v0.1.2-beta.3
- saber-promise v0.1.2-beta.2
- saber-promise v0.1.2-beta.1
- saber-promise v0.1.1
- saber-promise v0.1.0
- saber-rainbow
- saber-router
- saber-router v2.0.0
- saber-router v2.0.0-beta.1
- saber-router v2.0.0-alpha.2
- saber-router v2.0.0-alpha.1
- saber-router v1.0.0
- saber-router v0.2.4
- saber-router v0.2.3
- saber-router v0.2.2
- saber-router v0.2.1
- saber-router v0.2.0
- saber-router v0.1.0
- saber-router v0.1.0-beta.5
- saber-router v0.1.0-beta.4
- saber-router v0.1.0-beta.3
- saber-router v0.1.0-beta.2
- saber-router v0.1.0-beta.1
- saber-run
- saber-scroll
- saber-storage
- saber-string
- saber-tap
- saber-uri
- saber-viewport
- saber-viewport v1.1.0
- saber-viewport v1.0.0
- saber-viewport v0.2.12
- saber-viewport v0.2.11
- saber-viewport v0.2.10
- saber-viewport v0.2.9
- saber-viewport v0.2.8
- saber-viewport v0.2.6
- saber-viewport v0.2.5
- saber-viewport v0.2.1-beta.7
- saber-viewport v0.2.1-beta.6
- saber-viewport v0.2.1-beta.5
- saber-viewport v0.2.1-beta.4
- saber-viewport v0.2.1-beta.3
- saber-viewport v0.2.1-beta.2
- saber-viewport v0.2.1-beta.1
- saber-viewport v0.2.0
- saber-viewport v0.1.0
- saber-widget
saber-promise v0.1.2-beta.3
saber-promise
吾王的移动端的Promise/A+实现,遵循1.1规范
Usage
通过edp
引入模块
$ edp import saber-promise
var Resolver = require('saber-promise'); function doSomeThing() { var resolver = new Resolver(); doSync( function (result) { resolver.fulfill(result); }, function () { resolver.reject('connect error'); } ); return resolver.promise(); } doSomeThing().then( function (result) { alert(result); }, function (reason) { alert(reason); } );
About Exception
规范要求捕获并处理所有的异常#2.2.7.2,在项目开发中可能会经常遇到非预期的异常被自动处理而导致无从跟踪,这些错误基本都是程序级别的书写错误而非可预期的业务逻辑错误,一般都不会有相应的reject
处理。针对这种情况提供了全局事件:reject
与resolve
来监控处理(需要先调用Resolver.enableGlobalEvent()
启用全局事件),更暴力一些还可以在debug过程中使用Resolver.disableExceptionCapture()
来直接关闭异常处理,方便查找问题。
警告 异常相关的API都是非标准的,只建议在调试阶段使用,这些API在未来某版本中可能会被废除
API
Resolver 实例
有三种状态:pending
、fulfilled
、rejected
。只能从pending
变为fulfilled
或者从pending
变为rejected
,并且状态只能变更一次
创建Resolver
实例
var resolver = new Resolver();
resolver.fulfill( data )
将状态由pending
变更为fulfilled
,并将data
作为第一个参数触发所有已注册的onFulfilled
回调函数
var resolver = new Resolver(); resolver.fulfill(100);
多次调用处于非pending
状态的Resolver
实例的fulfill
方法是无效的
resolver.resolve( data )
完全等同于 Resolver.fulfill
,改个比较通用的名字…(>_<)…
resolver.reject( reason )
将状态由pending
变更为rejected
,并将reason
作为第一个参数触发所有已注册的onRejected
回调函数
var resolver = new Resolver(); resolver.reject('找不到对象');
多次调用处于非pending
状态的Resolver
实例的reject
方法是无效的
resolver.promise()
返回对应的Promise对象
Promise 实例
promise.then( onFulfilled, onRejected )
注册fulfilled
和rejected
状态的回调
onFulfilled
fulfilled
状态回调onRejected
rejected
状态回调
返回Promise
实例
Resolver
Resolver.promise( fn )
同步创建Promise
对象
fn
function(resolver)
处理函数
var promise = Resolver.promise(function (resolver) { setTimeout(function () { resolver.resolve(); }, 0); }); promise.then(function () { ... });
Resolver.fulfilled( data )
创建已经处于fulfilled
状态的Promise
对象
data
*
Resolver.resolved( data )
与.fulfilled()
完全相同
Resolver.rejected( reason )
创建已经处于rejected
状态的Promise
对象
reason
*
Resolver.all( promises )
关联多个promise
对象,返回的promise
在所有Promise
对象参数都fulfilled
时达到fulfilled
状态,如果参数中的有任意promise
对象rejected
则立即达到rejected
状态
promises
Array.<promise> | ...promise
可以是数组参数或者多个promise
对象
Resolver.enableGlobalEvent( Emitter )
非标准API 启动全局事件
Emitter
{Object}
事件发射器
全局事件是默认关闭的,saber-promise
不强依赖于saber-emitter
或者任何事件发射器,所以在开启全局事件时需要传入一个事件发射器来启用自定义事件,建议使用saber-emitter
,如下:
var Emitter = require('saber-emitter'); Resolver.enableGlobalEvent(Emitter); // resolved事件 Resolver.on('resolve', function (data) { ... }); // rejected事件 Resolver.on('reject', function (reason) { ... });
Resolver.disableExceptionCapture()
非标准API 禁用异常处理,默认时启动的。如果全局事件都不想监控了,用这个可以直接关闭异常处理,方便调试,简单粗暴~
Resolver.enableExceptionCapture()
非标准API 启用异常处理
Test
使用Promises/A+规范的Test Suite
$ npm install
$ npm test
===
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论