Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

queue-fun 基于Promise的队列类 1.0.0-alpha.1 发布

$
0
0

queue-fun是一个基于Promise的队列,支持超时,重试等配置,有浏览器端的版本(兼容IE6)
虽然不是所有人都需要用到队列,但我觉着应该还有点用, 所以最近又抽空重构了下. 个人的想法有太多局限性, 所以发了一个 alpha版, 期待大家给些建议
对比0.x的版本API变化较大, 但0.x的特性都有保留,详见项目主页
1.0真正将内部依赖的Promise彻底解耦, 还剥离了出来一个 extend-promise库用来扩展Pormise的常用方法.
1.0中默认用’bluebird’做为内部使用的Promise库, 浏览器端版本默认使用 easy-promise主要是bluebird有点大

Demo

var Queue = require('queue-fun');
var q = Queue.Q;  //配合使用的Promise流程控制类 可以使用原生Promise也可以用q.js,等实现Prmise的类库

//实列化一个最大并发为1的队列
var queue1 = new Queue(1,{
        ,"retry":0              //执行单元出错重试次数
        ,"retry_type":false     //重试模式 false:搁置,true:优先 
        ,"timeout":0            //超时
    });

//定义一个Promise风格的异步方法
function testfn(i){
    var defer = q.defer();
    setTimeout(function(){
        defer.resolve(i)
    },300)
    return defer.promise;
}
var log = function(a){ console.log(a); }

queue1.push(testfn,[1]) //向队列添加运行单元
.then(console.log); 

queue1.push(function(){return 2;}) //插入普通方法会按Promises/A+规则反回promise
.then(console.log);

queue1.unshift(testfn,[0]) //插入优先执行项 (后进先出)
.then(console.log);

queue1.addLikeArray([3,4],testfn,{'event_item_resolve':log}) //插入多个运行项 array,完成一项,将执行一次log
.then(console.log) 

queue1.addLikeProps({'a':5,'b':6,'c':7},testfn,{'event_item_resolve':log}) //插入多个运行项 map , 最后的promise值也是一个对应map
.then(console.log)

//queue1.start(); //执行队列
queue1.go(testfn,['go']).then(console.log) 
/*
 这条语等价于:
    queue1.push(testfn,['go']).then(console.log);
    queue1.start(); 
 一般情况下使用go方法将比较方便
*/

/* 输出如下:
0
1
2
3
4
[ 3, 4 ]
5
6
7
{ a: 5, b: 6, c: 7 }
go
*/

更详细的API请去项目主页查看 github


Viewing all articles
Browse latest Browse all 14821

Trending Articles