@slimio/lock

SlimIO Asynchronous Lock Handler

Usage no npm install needed!

<script type="module">
  import slimioLock from 'https://cdn.skypack.dev/@slimio/lock';
</script>

README

Lock

version Maintenance MIT dep size Known Vulnerabilities Build Status

SlimIO Asynchronous Handler Mutex "Like" Lock. This package has been created to easily lock parallel execution of JavaScript Asynchronous function.

Requirements

Getting Started

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

Usage example

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);

API

Properties

declare class Lock {
    public readonly max: number;
    public readonly running: number;
}

Methods

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).

Dependencies

This project have no dependencies.

License

MIT