UNPKG

minimal-promise-pool

Version:

A minimal library for managing multiple promise instances (promise pool).

3 lines (2 loc) 1.21 kB
class e{constructor(e=10){this._concurrency=e,this._queuedPromiseCount=0,this.promises=new Set}get workingPromiseCount(){return this.promises.size}get concurrency(){return this._concurrency}set concurrency(e){const t=this._concurrency;this._concurrency=e,e>t&&this.resume()}get queuedPromiseCount(){return this._queuedPromiseCount}promiseAll(){return Promise.all(this.promises.values())}promiseAllSettled(){return Promise.all([...this.promises.values()].map((e=>e.then((e=>({status:"fulfilled",value:e}))).catch((e=>({status:"rejected",reason:e}))))))}async run(e){await this.privateRunAndWaitForReturnValue(e)}async runAndWaitForReturnValue(e){const[t]=await this.privateRunAndWaitForReturnValue(e);return await t}async privateRunAndWaitForReturnValue(e){for(this._queuedPromiseCount++;this.promises.size>=this._concurrency;)this.waitingPromise??=new Promise((e=>{this.resumeFunction=e})),await this.waitingPromise;const t=e().finally((()=>{this._queuedPromiseCount--,this.promises.delete(t),this.resume()}));return this.promises.add(t),[t]}resume(){this.resumeFunction&&(this.resumeFunction(),this.waitingPromise=void 0,this.resumeFunction=void 0)}}export{e as PromisePool}; //# sourceMappingURL=index.js.map