delay-call
If the task overlaps, wait and run only once.
For example, suppose that when a file is changed, it automatically calls the build command.
And if 1000
files are modified at the same time, the build command is called 1000
times.
This is not good for performance. It would be nice to ignore duplicate calls and only respond to the last call.
This library helps you implement those functions easily.
Install
npm i delay-call
Node.js
import { DelayCall, DelayCallGlobally } from 'delay-call'
Browser (umd)
<script src="https://cdn.jsdelivr.net/npm/delay-call@latest/build/main/index.min.js"></script>
const { DelayCall, DelayCallGlobally } = DelayCallJS
Browser (module)
import { DelayCall, DelayCallGlobally } from 'https://cdn.jsdelivr.net/npm/delay-call@latest/build/module/index.min.js'
How to use
import { DelayCall } from 'delay-call';
const delay = new DelayCall();
function build() {
// ...
}
function onChangeFile() {
delay
.request('build-file', build)
.done('build-file')
.then(() => {
console.log('built done!');
});
}
Methods
string|number|symbol
, callback: () => void
, delay: number
= 25): this
request(id: Request to execute the callback function. The function is not called immediately and waits as much as the delay
parameter. The default value of the delay
is this.__delay
.
string|number|symbol
): boolean
cancel(id: Cancel the requested task with the id
parameter.
boolean
cancelAll(): Cancel all requested tasks.
string|number|symbol
): Promise<void>
done(id: Wait until the requested task of the 'id' parameter is actually called.
Use for globally
Sometimes build commands can be called from multiple files. It would be nice if we could delay the work globally.
You can use the DelayCallGlobally
class. The method of use is the same.
// file A
import { DelayCallGlobally } from 'delay-call';
const delay = new DelayCallGlobally();
function build() {
// ...
}
function onChangeFile() {
delay
.request('build-file', build)
.done('build-file')
.then(() => {
console.log('built done!');
});
}
// file B
import { DelayCallGlobally } from 'delay-call';
const delay = new DelayCallGlobally();
function build() {
// ...
}
function onChangeFile() {
delay
.request('build-file', build)
.done('build-file')
.then(() => {
console.log('built done!');
});
}
Docs
https://izure1.github.io/delay-call/
License
This library follows the MIT
license.