Promise 使用示例

Classes

Demos

链式传递的效果

KISSY.use('promise,node',function(S,Promise){
    KISSY.all("button").on("click", function () {
        var d = new Promise.Defer();
        var promise = d.promise;
        promise.then(function (v) {
            return v + 1;
        }).then(function (v) {
                alert(v); // => 2
            });
        d.resolve(1); // 该位置也可以放在 then 前面
    });
});

resolve 和 then 没有顺序依赖

KISSY.use('promise,node',function(S,Promise){
KISSY.all("button").on("click", function () {
    var d = new Promise.Defer();
    d.resolve(1); // 该位置也可以放在 then 前面
    var promise = d.promise;
    promise.then(function (v) {
        return v + 1;
    }).then(function (v) {
            alert(v); // => 2
        });
});
});

错误可以被传递

KISSY.use('promise,node',function(S,Promise){
KISSY.all("button").on("click", function () {
    var d = new Promise.Defer();
    d.reject("wrong");
    var promise = d.promise;
    promise.then(function (v) {
        return v + 1;
    }).then(function (v) {
            alert(v);
        }, function (reason) {
            alert(reason); // => "wrong"
        });
});
});

前一个 promise 如果处理了错误并返回会影响下一个 promise 的成功回调

KISSY.use('promise,node',function(S,Promise){
KISSY.all("button").on("click", function () {
    var d = new Promise.Defer();
    d.reject("wrong");
    var promise = d.promise;
    promise.then(function (v) {
        return v + 1;
    },function (reason) {
        return 2;
    }).then(function (v) {
            alert(v); // => 2
        }, function (reason) {
            alert(reason); // 不执行
        });
});
});

前一个 promise 的成功或失败回调如果抛出异常则影响下一个 promise 的失败回调

KISSY.use('promise,node',function(S,Promise){
KISSY.all("button").on("click", function () {
    var d = new Promise.Defer();
    d.resolve(1);
    var promise = d.promise;
    promise.then(function (v) {
        throw v + 1;
    },function (reason) {
        return 2;
    }).then(function (v) {
            alert(v); // 不回调
        }, function (reason) {
            alert(reason); // =>2
        });
});
});

成功回调可以返回新的 promise 进行嵌套处理

KISSY.use('promise,node',function(S,Promise){
KISSY.all("button").on("click", function () {
    var d = new Promise.Defer();
    d.resolve(1);
    var promise = d.promise;
    promise.then(function (v) {
        var d = new Promise.Defer();
        setTimeout(function () {
            d.resolve(v + 1);
        }, 1000);
        return d.promise;
    }).then(function (v) {
            alert(v); // 一秒后弹出 2
        });
});
});

Promise Done 的使用示例

KISSY.use('promise,node',function(S, Promise, Node){
    var $ = Node.all;
    $("button").on("click", function () {
        var d = new Promise.Defer();
        setTimeout(function() {d.reject("reject")}, 1000);
        var promise = d.promise;
        promise.done(function(){
            alert('success');
        }, function(message){
            alert(message); //如何不做回调去处理错误,会抛出异常,在控制台中输出。
        });
    });
});