UNPKG

moleculer

Version:

Fast & powerful microservices framework for Node.JS

51 lines (43 loc) 825 B
/* * moleculer * Copyright (c) 2023 MoleculerJS (https://github.com/moleculerjs/moleculer) * MIT Licensed */ "use strict"; /** * @typedef {import("./lock")} LockClass */ /** * @implements {LockClass} */ class Lock { constructor() { this.locked = new Map(); } acquire(key /*, ttl*/) { let locked = this.locked.get(key); if (!locked) { // not locked locked = []; this.locked.set(key, locked); return Promise.resolve(); } else { return new Promise(resolve => locked.push(resolve)); } } isLocked(key) { return !!this.locked.get(key); } release(key) { let locked = this.locked.get(key); if (locked) { if (locked.length > 0) { locked.shift()(); // Release the lock } else { this.locked.delete(key); } } return Promise.resolve(); } } module.exports = Lock;