1.0.15 • Published 4 years ago

@eu-ge-ne/lock-async v1.0.15

Weekly downloads
17
License
MIT
Repository
github
Last release
4 years ago

@eu-ge-ne/lock-async

Dead simple async lock. Written in TypeScript. With exponential backoff

Install | Example | API | License

npm.io npm version

Install

$ npm install @eu-ge-ne/lock-async

Example

Swap 2 values in async functions concurrently:

import { LockAsync } from "@eu-ge-ne/lock-async";

const lock = new LockAsync();

const wait = () => new Promise(resolve => setTimeout(resolve, 10));

let a = 1;
let b = 2;

const first = lock.run(async () => {
    await wait();
    const c = a;
    await wait();
    a = b;
    await wait();
    b = c;
});

const second = lock.run(async () => {
    await wait();
    const c = a;
    await wait();
    a = b;
    await wait();
    b = c;
});

await Promise.all([first, second]);

API

Create instance

Constructor parameters:

  1. timeout: number // default = 3000
  2. base: number // default = 1
  3. ceiling: number // default = 10
import { LockAsync } from "@eu-ge-ne/lock-async";

const lock1 = new LockAsync(3000, 1, 10);

// or

const lock2 = new LockAsync();

Run async function

import assert from "assert";

const result = await lock.run(() => new Promise(resolve => setTimeout(() => resolve("Result"), 100)));

assert.strict.equal(result, "Result");

Get status

const { locked, waiters, maxLockWaitTime } = lock.status();
  • locked: boolean - lock state
  • waiters: number - number of lock waiters
  • maxWaiters: number - max waiters during lock lifetime
  • maxLockWaitTime: number - max time, lock spent waiting
  • maxLockAttempts: number - max attempts, made during single lock

License

MIT

1.0.15

4 years ago

1.0.14

4 years ago

1.0.13

4 years ago

1.0.12

4 years ago

1.0.11

4 years ago

1.0.10

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago