Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including @ambassify/fetch-retried with all npm packages installed. Try it out:

var fetchRetried = require("@ambassify/fetch-retried")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

@ambassify/fetch-retried v2.0.2

Use the fetch API to run requests, implementing retries

fetch-retried

Use the fetch API to run requests, implementing retries

Installation

npm install --save @ambassify/fetch-retried

Usage

You can use the fetch api as per usual. The only thing different is the source of your fetch method. Here you use fetchRetried to create a fetch method that will use your desired config.

const fetchRetried = require('@ambassify/fetch-retried');
const fetch = fetchRetried({ delay: 100 });

fetch('https://www.google.com')
    .then(resp => resp.json())
    .then(json => console.log(json));

Options

All options are optional and have default values.

  • delay: When using the default exponential backoff, the delay used to calculate the timeout. Otherwise a method that calculated the timeout used. (default: 200)
  • retries: The number of times to retry a request. (default: 5)
  • isOK: A method that determines whether a request succeeded by returning true or false when passed a response. (default: (resp) => resp.ok)
  • shouldRetryError: When fetch throws an error this method determines whether the request is retried by returning true or false (default: () => true)
  • retryMethods: Which HTTP verbs to retry (default: ['PUT', 'DELETE', 'GET', 'HEAD', 'PATCH', 'OPTIONS'])
  • fetch: The underlying fetch implementation to use. (default: require('node-fetch'))

Backoff strategies

Strategies are attached to the default import of this package and can be accessed using.

const fetchRetried = require('@ambassify/fetch-retried');

fetchRetried.exponential;
// OR
fetchRetried.binaryExponential;

// Usage:
const fetch = fetchRetried({
    delay: fetchRetried.exponential(10)
})
// OR
const fetch = fetchRetried({
    delay: fetchRetried.binaryExponential()
})

exponential

function exponential(delay) {
    return (attempts) => (attempts * attempts) * delay;
}

binaryExponential

function binaryExponential(delay = 1) {
    return (attempts) => (Math.pow(2, attempts) - 1) * delay;
}

Contribute

We really appreciate any contribution you would like to make, so don't hesitate to report issues or submit pull requests.

License

This project is released under a MIT license.

About us

If you would like to know more about us, be sure to have a look at our website, or our Twitter accounts Ambassify, Sitebase, JorgenEvens

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free