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