@andranik-arakelyan/js-utilities
Version:
Javascript utilities
1 lines • 881 B
JavaScript
Object.defineProperty(exports,"__esModule",{value:true});exports.PromisePool=void 0;class PromisePool{concurrency;running=0;queue=[];constructor(concurrency){if(concurrency<=0){throw new Error("Concurrency must be greater than 0")}this.concurrency=concurrency}execute(fn){return new Promise(((resolve,reject)=>{const task=async()=>{try{this.running++;const result=await fn();resolve(result)}catch(error){reject(error)}finally{this.running--;this.processQueue()}};if(this.running<this.concurrency){task()}else{this.queue.push(task)}}))}processQueue(){if(this.queue.length>0&&this.running<this.concurrency){const nextTask=this.queue.shift();nextTask()}}get runningCount(){return this.running}get queuedCount(){return this.queue.length}get isAtCapacity(){return this.running>=this.concurrency}get maxConcurrency(){return this.concurrency}}exports.PromisePool=PromisePool;
;