type Job = () => Promise; let tail = Promise.resolve(); let pendingJobs = 0; export function queueSequential(job: Job): Promise { 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; }