SlimIO Asynchronous Handler Mutex "Like" Lock. This package has been created to easily lock parallel execution of JavaScript Asynchronous function.
- Node.js v14 or higher
This package is available in the Node Package Repository and can be easily installed with npm or yarn.
$ npm i @slimio/lock
# or
$ yarn add @slimio/lock
const Lock = require("@slimio/lock");
const asyncLocker = new Lock({ maxConcurrent: 3 });
async function npmInstall() {
const free = await asyncLocker.acquireOne();
try {
await new Promise((resolve) => setTimeout(resolve, 1000));
console.log("npm install resolved!");
}
finally {
free();
}
}
// Run 3 per 3 methods
Promise.all([
npmInstall(),
npmInstall(),
npmInstall(),
npmInstall(),
npmInstall()
]).then(() => console.log("all done!")).catch(console.error);
declare class Lock {
public readonly max: number;
public readonly running: number;
}
acquireOne(): Promise< () => void >
Create a new lock counter. Return a function that you need to execute to free the counter/lock.
freeOne(error?: Error): void
free an acquired lock (or do nothing if there is no lock acquired yet).
rejectAll(errorMessage?: string): void
Reject all promises and available locks. This will throw an Error for each called acquireOne. The default error is `Lock acquisition rejected!`.
reset(): void
Reset the Object (will reject if any locks or promises are detected active).
MIT