Files
turso/bindings/javascript/packages/common/async-lock.ts
Nikita Sivukhin 66de28d84b wip
2025-09-19 13:19:30 +04:00

29 lines
725 B
TypeScript

export class AsyncLock {
locked: boolean;
queue: any[];
constructor() {
this.locked = false;
this.queue = []
}
async acquire() {
if (!this.locked) {
this.locked = true;
return Promise.resolve();
} else {
const block = new Promise(resolve => { this.queue.push(resolve) });
return block;
}
}
release() {
if (this.locked == false) {
throw new Error("invalid state: lock was already unlocked");
}
const item = this.queue.shift();
if (item != null) {
this.locked = true;
item();
} else {
this.locked = false;
}
}
}