Just a Promise/A+ Javascript Library
JavaScript HTML
Latest commit 9b330ab May 14, 2015 @qiqiboy update
Permalink
Failed to load latest commit information.
src update May 14, 2015
README.md update Jan 8, 2015
index.html update Jan 8, 2015

README.md

JPromise

使用方法

基本用法同Promise规范。 额外新增了progress方法,使用方法参考下例。

//常规调用 new JPromise(resolver);
new JPromise(function(resolve,reject,notify){
    var t=setInterval(function(){
        notify('progress');
    },100);
    setTimeout(function(){
        //取消通知,否则会引发错误。
        //因为一旦resolve后状态不允许更改,所以无法继续通知!
        clearInterval(t);
        //完成该任务
        resolve('done!');
    },2000);
}).then(function(v){
    console.log(v); // done!
},function(v){
    console.log(v);//无输出
},function(v){
    console.log(v);//间隔100ms输出 progress
});

/* 上面调用还可以改写如下 */
var p=new JPromise,
    t;
t=setInterval(function(){
    p.notify('progress');
},100);
setTimeout(function(){
    //取消通知,否则会引发错误。
    //因为一旦resolve后状态不允许更改,所以无法继续通知!
    clearInterval(t);
    //完成该任务
    p.resolve('done!');
},2000);
p.progress(function(v){
    console.log(v);//间隔100ms输出 progress
}).done(function(v){
    console.log(v); // done!
});


//延迟调用链
var resolveDefer=function(t){
    return JPromise(function(resolve,reject,notify){
        setTimeout(function(){resolve(t);},t);
    });
},rejectDefer=function(t){
    return JPromise(function(resolve,reject,notify){
        setTimeout(function(){reject(t);},t);
    });
}
console.log('start');
JPromise.resolve(1000).then(function(t){
    return resolveDefer(t); //延迟1s
}).then(function(t){
    console.log(t+'ms后输出');
    return t+1000;
}).then(function(t){
    return resolveDefer(t); //延迟2s
}).then(function(t){
    console.log(t+'ms后输出');
    return rejectDefer(t+1000) //延迟3s,并返回失败
}).then(function(){
    console.log('成功')
},function(t){
    console.log(t+'ms后失败')
}).then(function(t){
    return resolveDefer(2000); //延迟2s
}).then(function(){
    console.log('调用完毕');
});

//获取受限promise,即只有 .then .catch .progress 方法,不允许外部更改promise状态
var p=new Promise;
p.promise(); //= new Promise(resolver).promise(); 等同于 Promise.promise(resolver);

//其它方法说明
JPromise.all(); //同Promise规范
JPromise.any(); //同Promise规范
JPromise.some(); //同Promise规范
JPromise.race(); //同Promise规范

JPromise.queue(); //参数应该为一组函数,函数返回一个promise,将按照传参顺序依次执行每个promise,全部执行完毕返回结果成功resolve