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.
lodash.debouce
or something similar?
Why? Why not use 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.
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