# think-debounce

> debounce for ThinkJS

Latest version **1.0.4** (published 2018-09-04) · 0 weekly downloads

## Install

```sh
npm install think-debounce
pnpm add think-debounce
yarn add think-debounce
bun add think-debounce
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 1.0.4 |
| Published | 2018-09-04 |
| First published | 2017-03-17 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=6.0.0 |
| Dependencies | 0 |
| Unpacked size | 8.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | welefen |
| Maintainers | berwin, bezos, huangxiaolu, lizheming, lushijie, sijiecai, toxicjohann, welefen, zhengqingxin |

## Links

- npm: https://www.npmjs.com/package/think-debounce
- Repository: https://github.com/thinkjs/think-debounce
- Homepage: https://github.com/thinkjs/think-debounce#readme
- Issues: https://github.com/thinkjs/think-debounce/issues
- npm.io page: https://npm.io/package/think-debounce

## Recent versions

- 1.0.4 (latest) — 2018-09-04
- 1.0.3 — 2017-03-17

## README

# think-debounce
[![Build Status](https://img.shields.io/travis/thinkjs/think-debounce/master.svg?style=flat-square)](https://travis-ci.org/thinkjs/think-debounce)
[![Coverage Status](https://img.shields.io/coveralls/thinkjs/think-debounce/master.svg?style=flat-square)](https://coveralls.io/github/thinkjs/think-debounce?branch=master)
[![npm](https://img.shields.io/npm/v/think-debounce.svg?colorB=brightgreen&style=flat-square)](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
});
```

---
_Source: https://npm.io/package/think-debounce · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
