Rate limit calls to promise-returning functions with linear backoff.
Last updated 4 years ago by goto-bus-stop .
MIT · Original npm · Tarball · package.json
$ cnpm install linear-promise-backoff-queue 
SYNC missed versions from official npm registry.


Rate limit calls to promise-returning functions with linear backoff.


With npm do:

npm install --save linear-promise-backoff-queue


Create a backoff queue:

var createBackoff = require('linear-promise-backoff-queue')

var backoff = createBackoff({
  increment: 200, // amount of additional `ms` to wait between each call
  max: 2200, // max backoff time between calls

Wrap promise-returning functions to use the backoff queue:

var request = backoff(function () {
  // do your API request

Use your functions as normal:

// Called immediately
request('/api/hello').then(function () {
  console.log('done 1')
// Called after 200ms
request('/api/hello').then(function () {
  console.log('done 2')


var backoff = createBackoff(opts)

Create a backoff queue. The return value is a function that wraps functions passed to it so they will use this backoff queue. Multiple functions can share the same queue.

opts is an object with possible options:

  • increment - The time in milliseconds to add on top of the delay between function calls. If this is eg. 200, the first call will wait 0ms, the second will wait 200ms, and the third will wait 400ms. When the queue empties, when all waiting functions have been called and the remaining delay has passed, the delay will reset to 0ms.
  • max - The maximum amount of delay between function calls. Once the delay reaches this value, the increment will no longer be added on top each time.
  • Promise - Optional Promise constructor to use. The global Promise is used by default.

var fnB = backoff(fn)

Wrap fn so it will use the backoff queue backoff. fn should return a thenable. When called, fnB will wait for the queue to empty and then call fn, passing through arguments and this. It returns a Promise that resolves with the result of fn.



Current Tags

  • 1.0.0                                ...           latest (4 years ago)

1 Versions

  • 1.0.0                                ...           4 years ago
Maintainers (1)
Today 0
This Week 0
This Month 1
Last Day 0
Last Week 0
Last Month 3
Dependencies (0)
Dev Dependencies (1)
Dependents (1)

Copyright 2014 - 2017 © |