基于Promise的nodejs隊列控制模塊:queue-fun

w427 9年前發布 | 28K 次閱讀 queue-fun Node.js 開發

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.baiduhome.net/lib/view/home/1433059171182

 本文由用戶 w427 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!