https://github.com/thinkjs/think-debounce
think debounce
https://github.com/thinkjs/think-debounce
thinkjs thinkjs3
Last synced: 16 days ago
JSON representation
think debounce
- Host: GitHub
- URL: https://github.com/thinkjs/think-debounce
- Owner: thinkjs
- License: mit
- Created: 2016-08-12T01:34:07.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2018-09-04T02:19:37.000Z (over 6 years ago)
- Last Synced: 2024-04-29T09:43:10.862Z (12 months ago)
- Topics: thinkjs, thinkjs3
- Language: JavaScript
- Homepage:
- Size: 13.7 KB
- Stars: 2
- Watchers: 5
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# think-debounce
[](https://travis-ci.org/thinkjs/think-debounce)
[](https://coveralls.io/github/thinkjs/think-debounce?branch=master)
[](https://www.npmjs.com/package/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
```js
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:
```js
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
});
```