28 lines
437 B
TypeScript
28 lines
437 B
TypeScript
type Job<T> = () => Promise<T>;
|
|
|
|
let tail = Promise.resolve();
|
|
let pendingJobs = 0;
|
|
|
|
export function queueSequential<T>(job: Job<T>): Promise<T> {
|
|
pendingJobs += 1;
|
|
|
|
const run = tail.then(async () => {
|
|
try {
|
|
return await job();
|
|
} finally {
|
|
pendingJobs -= 1;
|
|
}
|
|
});
|
|
|
|
tail = run.then(
|
|
() => undefined,
|
|
() => undefined
|
|
);
|
|
|
|
return run;
|
|
}
|
|
|
|
export function queuedJobCount() {
|
|
return pendingJobs;
|
|
}
|