JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 34011
  • Score
    100M100P100Q131220F
  • License MIT

Simple exponential backoff pulled out of Primus by @3rd-Eden

Package Exports

  • back

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (back) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

back

build
status

NPM

A simple module to be used for creating exponentially weighted backoff attempts. Used in Primus

Example

var http = require('http');
var back = require('back');
//
// Options to use for backoff
//
// Remark: This object is modified so it should be cloned if you are dealing
// with independent backoff attempts and want to use these values as a base.
//
var backoff = {
  retries: 3,
  minDelay: 1000, // Defaults to 500ms
  maxDelay: 10000, // Defaults to infinity
  // The following option is shown with its default value but you will most
  // likely never define it as it creates the exponential curve.
  factor: 2,
};

function retry(err) {
  return back(function (fail) {
    if (fail) {
      // Oh noez we never reconnect :(
      console.error('Retry failed with ' + err.message);
      process.exit(1);
    }
    //
    // Remark: .attempt and .timeout are added to this object internally
    //
    console.log('Retry attempt # ' + backoff.attempt +
                ' being made after ' + backoff.timeout + 'ms');
  request();
  }, backoff);
}

function request() {
  http.get('http://localhost:9000', function (res) {
    console.log('Successful Response that will not happen!');
  }).on('error', retry);
}

request();

API

back(callback, backoffOpts);

The back function returns you a function that simply executes the callback after a setTimeout. The timeout is what is based on an exponential backoff of course!

Note:

I am considering switching the backoffOpts and callback as I understand it is an irregular api if enough people want it.