set-single-timeout

1.0.5 • Public • Published

NPM version

set-single-timeout

This pattern is used for preventing concurrent scheduling of a task when multiple events fire in a short interval. This effectively acts as a debounce for the task, except that the task will continue to delay as more requests come in.

Why? Why not use lodash.debouce or something similar?

I looked at both lodash debounce and other setTimeout libraries that were available, and I couldn't find one that did exactly what I wanted. My use case is around having an idempotent instance of a setTimeout call, no matter how many instances of a particular object were held in memory by the application.

Example: You have five instances of the same object listening to the same event, and they all have a method wrapped in a debounce. If you fire that event multiple times, even if you debounce, you'll still get five event fires.

I was looking for something that would only fire once, even if it was used in multiple instances. Hence this little library.

Will this solve the issue with node leaking memory on setTimeout usage?

Yes. This library effectively manages the memory of these tasks, and will wipe out the reference to the object when the timeout completes. However, the more durable fix (converted the timeout object into a primative) only just landed, so this library will continue to manage the object state until that patch rolls out to the wider world.

Install

npm install set-single-timeout

Use

const setSingleTimeout = require('set-single-timeout');

// config is optional.
const config = {
  eventName: 'sendWindowsSoftwareUpdateReport', // if set & logger is set, used in debugging
  logger: console.log,  // if set, debug information is output on progress
}

// Timeout key. Will
const singleTimeoutWithConfig = setSingleTimeout(config);
const singleTimeoutWithoutConfig = setSingleTimeout();

singleTimeoutWithConfig(() => timeoutWillFireWithLogging(), 5 * 60 * 1000);
singleTimeoutWithoutConfig(() => timeoutWillFireQuietly(), 5 * 60 * 1000);

License

MIT

Dependents (0)

Package Sidebar

Install

npm i set-single-timeout

Weekly Downloads

56

Version

1.0.5

License

MIT

Unpacked Size

9.58 kB

Total Files

9

Last publish

Collaborators

  • duereg