基于Promise的nodejs队列控制模块:queue-fun

w427 9年前

queue-fun 是基于Promise的 运行队列控制类。

使用场景

  • 巨量同逻辑业务平稳处理

  • 间歇性高并发系统

  • 控制单用户占用资源过高

队列

queue-fun.Queue(q)

初始化队类 参数q可传

  • 无参数 队列使用内置的实现的Promise;

  • q/ES6原生Promise 插入队列方法:pushunshiftgojump返回对应的promise

实例化队列 new queue-fun.Queue()(runMax, con)

  • runMax 并行运行队列方法的最大个数

  • con 配置队列 开始 结束 事件,运行单元的 成功,失败 事件及配置执行单元出错的 重试 机制。

示例代码:
var queuefun = require('queue-fun');  //引入  //初始化Promise异步队列类  var Queue = queuefun.Queue();   //实列化最大并发为2的运行队列  var queue1 = new Queue(2,{      "event_succ":function(data){console.log('queue-succ:',data)}  //成功      ,"event_err":function(err){console.log('queue-succ:',data)}  //失败  });   var q = queuefun.Q;  //模块中简单实现了Q的基本功能,可以一试,  //定义一个Promise风格的异步方法  function testfun(i){      var deferred = q.defer();      setTimeout(function(){          if(i\ && i % 3 == 0){              deferred.reject(new Error("err " + i))          }else{              deferred.resolve(i)          }      },(Math.random() * 2000)>>0)      return deferred.promise;  }  //向队列添加运行单元  queue1.push(testfun,[1]) //添加运行项  queue1.go(testfun,[2]) //添加并自动启动队列  queue1.go(testfun,[3],{Queue_event:0}) //添加不会触发队列 回调的运行项.  queue1.go(testfun,[4]).then(      function(data){console.log('done-succ:',data)},      function(err){console.log('done-err:',err)}  )  queue1.go(testfun,[5],{      event_succ:function(data){console.log('conf-succ:',data)},      event_err:function(err){console.log('conf-err:',err)}  })

项目主页:http://www.open-open.com/lib/view/home/1433059171182