UNPKG

flexbiz-server

Version:

Flexible Server

4 lines (3 loc) 1.01 kB
class Task{constructor($action$$,$callback$$){this.callback=$callback$$;this.action=$action$$}async run(){const $action$$=this.action;try{let $rs$$=await $action$$();this.callback&&this.callback(null,$rs$$)}catch($e$$){this.callback&&this.callback($e$$)}}} module.exports=class{constructor($number_task_parallel$$=100){this._queue=[];this.runTask=this.runTask.bind(this);this.exec=this.exec.bind(this);this.isRunning=!1;this.number_task_parallel=$number_task_parallel$$}async runTask(){this.isRunning=!0;if(this._queue.length===0)this.isRunning=!1;else{var $tasks$$=[];for(let $i$$=0;$i$$<Math.min(this._queue.length,this.number_task_parallel);$i$$++)$tasks$$.push(this._queue.shift());await Promise.all($tasks$$.map($task$$=>(async()=>{try{await $task$$.run()}catch($e$$){Logger.error("error run blockchain transaction", $e$$)}})()));this._queue.length>0?this.runTask():this.isRunning=!1}}exec($action$$,$callback$$=()=>{}){this._queue.push(new Task($action$$,$callback$$));this.isRunning||this.runTask()}};