src/util/mutex.ts (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
export type Mutex = {
acquire(): Promise<() => void>;
};
export const createMutex = (): Mutex => {
let queue = Promise.resolve<unknown>(undefined);
return {
async acquire(): Promise<() => void> {
let release = () => {};
const next = new Promise<void>((resolve) => {
release = resolve;
});
const prev = queue;
queue = prev.then(() => next);
await prev;
return release;
},
};
};
|