npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

retry-agent

v2.0.2

Published

Promise-based retry module with several strategies.

Downloads

5

Readme

Installing

Using npm:

npm install retry-agent

Using git:

git clone https://github.com/SeizedBots/node-retry-agent.git

Getting Started

To get started, just instantiate RetryAgent from the package.

const {RetryAgent} = require('retry-agent');

const agent = new RetryAgent();

//YOUR CODE HERE

Config

There are several options, passed by value, available for instantiating a RetryAgent. (Listed values are default.)

new RetryAgent({
    strategy: Strategies.ConstantBackOff, //see Constant Back Off in Strategies
    minTimeout: 1000, //min time a between retries (assuming randomized is false) in milliseconds
    maxTimeout: 1000, //max time a between retries (assuming randomized is false) in milliseconds
    randomize: false, //if timing should be slightly randomized (up to minTimeout / 2 more or less for standard strategies)
    retries: 5 //the number of retries done before rejecting (if set to -1, it will retry until it resolves)
});

These can be accessed and changed at any time by accessing the config property of the agent.

Strategies

A strategy can be passed to the constructor under the strategy property, defaulting to Strategies.ConstantBackOff. This property can be accessed and changed at any time by accessing the strategy property of the agent.

Constant Back Off

This strategy (Strategies.ConstantBackOff) will retry with a constant delay between each attempt using the minTimeout value.

Exponential Back Off

This strategy (Strategies.ExponentialBackOff) will retry with exponentially increasing delays between retries until reaching maxTimeout on the final retry. If retries is set to -1, maxTimeout will be ignored, with the timeout being multiplied by e for each subsequent retry.

Linear Back Off

This strategy (Strategies.ExponentialBackOff) will retry with linearly increasing delays between retries until reaching maxTimeout on the final retry. If retries is set to -1, maxTimeout will be ignored, increasing by minTimeout each subsequent retry.

Usage

Create

This takes a function that returns a promise as an input and returns a new function that executes the code in the given function using the RetryAgent's current Strategy. (NOTE: When the Strategy changes for a RetryAgent, functions created with that RetryAgent will use the new Strategy.)

const getExample = agent.create(() => {
    return new Promise((resolve, reject) => {
        axios.get('https://example.com').then(resolve).catch(reject);
    });
});

Execute

This is a helper method that Creates and executes the given function using the current Strategy. (NOTE: When the Strategy changes for a RetryAgent, functions created with that RetryAgent will use the new Strategy.)

agent.execute((resource) => {
    return new Promise((resolve, reject) => {
        axios.get(`https://example.com/${resource}`).then(resolve).catch(reject);
    });
}, 'stuff');

Strategy Interface

The Strategy interface is very simple, taking in a config from a RetryAgent and the retry attempt number ([1, config.retry]).

const {delay} = require('retry-agent');

function myStrategy(config, attempt){
    //YOUR CODE HERE

    return delay(/* timeout in milliseconds */);
}

Feel free to make a pull request adding any strategies that might be useful here!

Delay

The function delay is a promise-based alternative to setTimeout. It takes only a timeout in milliseconds as an input and returns a promise that resolves after said timeout.

Access Patterns

The retry-agent module exports the following:

{
    delay: require('./util/delay'),
    RetryAgent: require('./RetryAgent'),
    Strategies: require('./Strategies')
}

Contributing

If you would like to contribute or create an issue, please do so at the official GitHub page.