node-distributed-debounce
TypeScript icon, indicating that this package has built-in type declarations

1.0.9 • Public • Published

node-dsitributed-debounce

debounce function for distributed system with redis and nodejs.

Installation

$ npm i -S node-distributed-debounce

and install redis

$ npm i -S redis
$ npm i -D @types/redis

Usage

example:

import { distributedDebounce } from 'node-distributed-debounce';
// const { distributedDebounce } = require('node-distributed-debounce');
import redis from 'redis';

const redisclient = redis.createClient();

function debouncedCall(index: number) {
  distributedDebounce(() => {
    console.log('called', index);
  }, {
    wait: 5, // sec
    key: 'dist:debounce:call', // key for debounce
    redisclient,
  }).catch(e => console.error(e));
}

const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
function main() {
  for (let i = 0; i < 10; i++) {
    debouncedCall(i);
    await wait(100);
  }
}

output:

called 9

QA

  • Q: Is it works with redis cluster?
  • A: Yes, it is.

Algorithm

FUNCTION DISTRIBUTED_DEBOUNCE(key, wait, callback)

ticket = MULTI
  INCR(key)
  EXPRE(key, wait)
EXEC

SLEEP(wait)

currentTicket = GET(key)
IF currentTicket != ticket
  EXIT
END

IF SET(key_lock, '', NX, PX, 100) != OK
  EXIT
END

callback()

Package Sidebar

Install

npm i node-distributed-debounce

Weekly Downloads

551

Version

1.0.9

License

MIT

Unpacked Size

5.61 kB

Total Files

5

Last publish

Collaborators

  • ryosukesuzuki