think-debounce
v1.0.4
Published
debounce for ThinkJS
Downloads
2,743
Keywords
Readme
think-debounce
think-debounce
runs a time-consuming operation. The operation may be called several times concurrently, but within think-debounce
, it will only be run once before it's finished.
In particular, You can use think-debounce
to avoid duplicate requests for a remote API.
Syntax
import Debounce from 'think-debounce';
const instance = new Debounce();
instance.debounce(key, callback);
key
{String} the identity of the operation.callback
{Function} the function which contains the operation and returns a Promise object.- return {Object} a Promise object.
Usage
Take reading a local file for an example:
import Debounce from 'think-debounce';
import fs from 'fs';
let instance = new Debounce();
let readTimes = 0;
let awaitKey = 'readMyFile';
let filePath = '../my/file/path';
let readMyFileCallback = () => {
return new Promise((resolve, reject) => {
// even if `readMyFile` operation is called several times,
// `readMyFileCallback` will only be run once before it's finished.
readTimes ++;
fs.readFile(filePath, {encoding: 'utf8'}, (err, data) => {
if(err) reject(err);
resolve(data);
});
});
}
let promise1 = instance.debounce(awaitKey, readMyFileCallback);
let promise2 = instance.debounce(awaitKey, readMyFileCallback);
return Promise.all([promise1, promise2]).then(values => {
console.log(readTimes); // 1
});