32 lines
777 B
TypeScript
32 lines
777 B
TypeScript
import { defer } from './smartpromise.classes.deferred.js';
|
|
|
|
export class CumulativeDeferred {
|
|
private accumulatedPromises: Promise<unknown>[] = [];
|
|
private deferred = defer<void>();
|
|
public promise = this.deferred.promise;
|
|
|
|
constructor() {
|
|
setTimeout(async () => {
|
|
while (this.accumulatedPromises.length > 0) {
|
|
const poppedPromise = this.accumulatedPromises.shift();
|
|
await poppedPromise;
|
|
}
|
|
this.deferred.resolve();
|
|
}, 0);
|
|
}
|
|
|
|
public subDefer() {
|
|
const done = defer<void>();
|
|
this.addPromise(done.promise);
|
|
return done;
|
|
}
|
|
|
|
public addPromise(promiseArg: Promise<unknown>): void {
|
|
this.accumulatedPromises.push(promiseArg);
|
|
}
|
|
}
|
|
|
|
export const cumulativeDefer = () => {
|
|
return new CumulativeDeferred();
|
|
};
|