@alvarocastro/backoff

Simple implementation of a backoff utility

Usage no npm install needed!

<script type="module">
  import alvarocastroBackoff from 'https://cdn.skypack.dev/@alvarocastro/backoff';
</script>

README

Backoff

NPM Build status Maintainability status Coverage status Bundle size Code style: XO Release: Semantic

A simple implementation of a backoff utility.

Install

npm install @alvarocastro/backoff

Usage

const Backoff = require('@alvarocastro/backoff');
const backoff = new Backoff();

const connect = function () {
    console.log('Connecting...');
    const rand = Math.random();

    if (rand < 0.2) {
        console.log('Success!');
        backoff.reset();
        return true;
    }
    
    const delay = backoff.duration();
    console.log(`Failed. Retrying in ${delay}ms`);
    setTimeout(function () {
        connect();
    }, delay);
};

connect();

Backoff(options = {min: 1000, max: 60000, factor: 2, jitter: 0})

Receives an optional options object.

options.min

Type: Number
Default: 1000

Minimum duration.

options.max

Type: Number
Default: 6000

Maximum duration.

options.factor

Type: Number
Default: 2

Factor in which the duration increases each time.

options.jitter

Type: Number
Default: 0

Randomizes the duration. For example with a value of 0.5 the initial default duration will be between 500 and 1500. The randomization when used in a reconnection helps smooth the load induced by the reconnection attempts of multiple clients, in case a server goes down. Use 0 for no randomization.

duration()

Returns the next time to wait in milliseconds.

reset()

Resets the internal attempts count, bringing the next duration() time back to the starting value.

Contributing

Contributions are always welcome! Please run npm test beforehand to ensure everything is ok.

Support

If you use this package please consider starring it :)