Need private packages and team management tools?Check out npm Teams »

debounce-promise

3.1.2 • Public • Published

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) ---

Install

npm i debounce-promise

DownloadsWeekly Downloads

91,935

Version

3.1.2

License

MIT

Unpacked Size

18.7 kB

Total Files

13

Last publish

Collaborators

  • avatar