24 lines
535 B
TypeScript
Raw Normal View History

export class LockManager {
2024-10-19 05:25:26 -06:00
private locks: { [key: string]: Promise<any> }
2024-04-26 02:10:37 -04:00
constructor() {
2024-10-19 05:25:26 -06:00
this.locks = {}
}
2024-04-26 02:10:37 -04:00
async acquireLock<T>(key: string, task: () => Promise<T>): Promise<T> {
if (!this.locks[key]) {
this.locks[key] = new Promise<T>(async (resolve, reject) => {
try {
2024-10-19 05:25:26 -06:00
const result = await task()
resolve(result)
} catch (error) {
2024-10-19 05:25:26 -06:00
reject(error)
} finally {
2024-10-19 05:25:26 -06:00
delete this.locks[key]
2024-04-26 02:10:37 -04:00
}
2024-10-19 05:25:26 -06:00
})
2024-04-26 02:10:37 -04:00
}
2024-10-19 05:25:26 -06:00
return await this.locks[key]
}
2024-11-16 21:35:06 -05:00
}