Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.
/ Lock Public archive

SlimIO Node.js Semaphore for async/await

License

Notifications You must be signed in to change notification settings

SlimIO/Lock

Repository files navigation

Lock

version Maintenance MIT 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).

License

MIT

About

SlimIO Node.js Semaphore for async/await

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •