minimal-promise-pool
Version:
A minimal library for managing multiple promise instances (promise pool).
3 lines (2 loc) • 1.22 kB
JavaScript
"use strict";exports.PromisePool=class{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 s=this._concurrency;this._concurrency=e,e>s&&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[s]=await this.privateRunAndWaitForReturnValue(e);return await s}async privateRunAndWaitForReturnValue(e){for(this._queuedPromiseCount++;this.promises.size>=this._concurrency;)this.waitingPromise??=new Promise((e=>{this.resumeFunction=e})),await this.waitingPromise;const s=e().finally((()=>{this._queuedPromiseCount--,this.promises.delete(s),this.resume()}));return this.promises.add(s),[s]}resume(){this.resumeFunction&&(this.resumeFunction(),this.waitingPromise=void 0,this.resumeFunction=void 0)}};
//# sourceMappingURL=index.cjs.map