Notes/src/public/app/utils/mutex.ts
Elian Doran 3855f0e75f
Revert "port tab manager to ts"
This reverts commit 45a50f3aa1ebe5f6687d1733f3dbed58b46c42cb.
2025-03-03 23:34:54 +02:00

29 lines
802 B
TypeScript

export default class Mutex {
private current: Promise<void>;
constructor() {
this.current = Promise.resolve();
}
lock() {
let resolveFun: () => void;
const subPromise = new Promise<void>((resolve) => (resolveFun = () => resolve()));
// Caller gets a promise that resolves when the current outstanding lock resolves
const newPromise = this.current.then(() => resolveFun);
// Don't allow the next request until the new promise is done
this.current = subPromise;
// Return the new promise
return newPromise;
}
async runExclusively(cb: () => Promise<void>) {
const unlock = await this.lock();
try {
return await cb();
} finally {
unlock();
}
}
}