UNPKG

@atomiqlabs/base

Version:

Base classes and interfaces for atomiq protocol

31 lines (22 loc) 603 B
export class Lockable { private lockedTill = 0; private lockNonce = 0; lock(timeoutSeconds: number): (() => boolean) | null { if(this.isLocked()) { return null; } this.lockedTill = Date.now()+(timeoutSeconds*1000); this.lockNonce++; const lockNonce = this.lockNonce; return () => { if(this.lockNonce!==lockNonce) { return false; } this.lockedTill = 0; return true; }; } isLocked(): boolean { return this.lockedTill>Date.now(); } }