返回介绍

saber-promise v0.1.2-beta.2

发布于 2023-10-15 20:10:06 字数 4478 浏览 0 评论 0 收藏 0

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处理。针对这种情况提供了全局事件:rejectresolve来监控处理(需要先调用Resolver.enableGlobalEvent()启用全局事件),更暴力一些还可以在debug过程中使用Resolver.disableExceptionCapture()来直接关闭异常处理,方便查找问题。

警告 异常相关的API都是非标准的,只建议在调试阶段使用,这些API在未来某版本中可能会被废除

API

Resolver 实例

有三种状态:pendingresolvedrejected。只能从pending变为resolved或者从pending变为rejected,并且状态只能变更一次

创建Resolver实例

var resolver = new Resolver();

resolver.fulfill( data )

将状态由pending变更为resolved,并将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 )

注册已完成已拒绝状态的回调

  • onFulfilled 已完成状态回调
  • onRejected 已拒绝状态回调

返回Promise实例

Resolver

Resolver.promise( fn )

创建Promise对象的快捷方式

  • fn function(resolver) 处理函数
var promise = Resolver.promise(function (resolver) {
        setTimeout(function () {
            resolver.resolve();
        }, 0);
    });

promise.then(function () {
    ...
});

Resolver.all( promises )

关联多个promise对象,返回的promise在所有参数都resolved时达到resolved状态,如果参数中的有任意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);
Resolver.on('resolve', function () {
    ...
});

Resolver.disableExceptionCapture()

非标准API 禁用异常处理,默认时启动的。如果全局事件都不想监控了,用这个可以直接关闭异常处理,方便调试,简单粗暴~

Resolver.enableExceptionCapture()

非标准API 启用异常处理

Test

使用Promises/A+规范的Test Suite

$ npm install
$ npm test

===

Saber

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文