3.1.2 • Published 7 years ago

debounce-promise v3.1.2

Weekly downloads
159,355
License
MIT
Repository
github
Last release
7 years ago

debounce-promise

Build Status Standard - JavaScript Style Guide

NPM

Create a debounced version of a promise returning function

Install

npm i -S debounce-promise

Usage example

var debounce = require('debounce-promise')

function expensiveOperation(value) {
  return Promise.resolve(value)
}

var saveCycles = debounce(expensiveOperation, 100);

[1, 2, 3, 4].forEach(num => {
  return saveCycles('call no #' + num).then(value => {
    console.log(value)
  })
})

// Will only call expensiveOperation once with argument `4` and print:
//=> call no #4
//=> call no #4
//=> call no #4
//=> call no #4

With leading=true

var debounce = require('debounce-promise')

function expensiveOperation(value) {
  return Promise.resolve(value)
}

var saveCycles = debounce(expensiveOperation, 100, {leading: true});

[1, 2, 3, 4].forEach(num => {
  return saveCycles('call no #' + num).then(value => {
    console.log(value)
  })
})

//=> call no #1
//=> call no #4
//=> call no #4
//=> call no #4

With accumulate=true

var debounce = require('debounce-promise')

function squareValues (argTuples) {
  return Promise.all(argTuples.map(args => args[0] * args[0]))
}

var square = debounce(squareValues, 100, {accumulate: true});

[1, 2, 3, 4].forEach(num => {
  return square(num).then(value => {
    console.log(value)
  })
})

//=> 1
//=> 4
//=> 9
//=> 16

Api

debounce(func, [wait=0], [{leading: true|false, accumulate: true|false})

Returns a debounced version of func that delays invoking until after wait milliseconds.

Set leading: true if you want to call func and return its promise immediately.

Set accumulate: true if you want the debounced function to be called with an array of all the arguments received while waiting.

Supports passing a function as the wait parameter, which provides a way to lazily or dynamically define a wait timeout.

Example timeline illustration

function refresh() {
  return fetch('/my/api/something')
}
const debounced = debounce(refresh, 100)
time (ms) ->   0 ---  10  ---  50  ---  100 ---
-----------------------------------------------
debounced()    | --- P(1) --- P(1) --- P(1) ---
refresh()      | --------------------- P(1) ---
const debounced = debounce(refresh, 100, {leading: true})
time (ms) ->   0 ---  10  ---  50  ---  100 ---  110 ---
--------------------------------------------------------
debounced()    | --- P(1) --- P(2) --- P(2) --- P(2) ---
refresh()      | --- P(1) --------------------- P(2) ---
@andromeda-ui/selecttest-dsm-github-harmonizerpassbolt_extensionoptimade.sciencemaestro-vsc-extension-plugin@roboholix/shared-components@jgrimard/homebridge-vivint-mfa-test@everything-registry/sub-chunk-1457tchen-vuelayersvic-eligible-testhomebridge-daikin-airbasehomebridge-plugin-verahomebridge-vivinthomebridge-vivint-fixedhomebridge-vivint-latesthomebridge-polestarharvesterjsluxury-escapesld-qanda-ruxkovanmailmedipass-react-select@xh/hoist@ticketlog/americas-ui@veupathdb/eda@usercentric/uc-design-system@urban-bot/core@veupathdb/components@zalastax/nolb-deb@zeroer/general-tools@zimyo/components@zimyo/engageasseco-commonsasseco-moi-commons@grafana/prometheus@gooddata/sdk-ui-ext@gooddata/sdk-ui-kit@guidesmiths/react-form-buildertsxlogintsxlogin45tiny-ssgvuelayersvuelayers-cwao-react-shared-componentsunbagzerionprokovanmail@infinitebrahmanuniverse/nolb-deb@ks-console/shared@linzjs/step-ag-gridminoshiromodokiminta-studiomobx-localforage-storemobx-blocksmg-formsopengate-vjsfobojobo-repositorynukeleuspassbolt-styleguidepagelogicreact-booking-formreact-cimpress-commentsaurabhorionlibsairamorionlibpurecloud-streaming-clientnoflo-nodejsresilio-sync-watch-configpubquiz-managerrainbowprokovanmailshapeable-starter-webgit-add-and-commitgithub-harmonizergraphql-language-service@onebeyond/react-form-builder@omega/runtime@omm/cerebro-confluence-jira@getflip/swirl-components@etherspot/react-transaction-buidler@home-assistant-matter-hub/core@nitintf/styles@interface-technologies/iti-react@emuanalytics/flow-cli@financial-times/x-topic-search@igloo-be/core-cms-cli@paypossible/formik-store@postalk/componentsgenesys-cloud-streaming-clientgfh-clientformik-storefunbox_test@techslice-official/sandboxdynamic-reportsdrcash-react-libsenforce-uiezuikit-jsflow-engine-cli@pratico/web-editor@pucki/passbolt-styleguide@byudaniel/refreshing-config-store@chirpy-dev/main-app@chirpy-dev/ui@best-apps/gfx-editor
3.1.2

7 years ago

3.1.1

7 years ago

3.1.0

8 years ago

3.0.2

8 years ago

3.0.1

9 years ago

3.0.0

9 years ago

2.1.1

9 years ago

2.1.0

9 years ago

2.0.1

9 years ago

2.0.0

9 years ago

1.1.1

9 years ago

1.1.0

10 years ago

1.0.5

10 years ago

1.0.4

10 years ago

1.0.3

10 years ago

1.0.2

10 years ago

1.0.1

10 years ago

1.0.0

10 years ago