Skip to content

miracle2k/async-throttle

 
 

Repository files navigation

async-throttle

Build Status -Coverage Status semantic-release Commitizen friendly

throttle async and promise-returning functions. Other packages don't do it right.

Installing

npm install --save @jcoreio/async-throttle

Usage

import throttle from '@jcoreio/async-throttle'
function throttle<Args: Array<any>, Value>(
  func: (...args: Args) => Promise<Value>,
  wait: ?number,
  options?: {
    getNextArgs?: (current: Args, next: Args) => Args
  }
): (...args: Args) => Promise<Value>;

Creates a throttled function that only invokes func at most once per every wait milliseconds, and also waits for the Promise returned by the previous invocation to finish (it won't invoke func in parallel).

The promise returned by the throttled function will track the promise returned by the next invocation of func.

If wait is falsy, it is treated as 0, which causes func to be invoked on the next tick afte the previous invocation finishes.

By default, func is called with the most recent arguments to the throttled function. You can change this with the getNextArgs option -- for example, if you want to invoke func with the minimum of all arguments since the last invocation:

const throttled = throttle(foo, 10, {
  getNextArgs: ([a], [b]) => [Math.min(a, b)]
})
throttled(2)
throttled(1)
throttled(3)
// foo will be called with 1

// time passes...

throttled(4)
throttled(6)
throttled(5)
// foo will be called with 4

About

throttle async and promise-returning functions like lodash.throttle

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%