JSPM

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

Tiny fetch API wrapper to add support for retries, retry delay & timeouts

Package Exports

  • tenacious-fetch
  • tenacious-fetch/dist/tenacious-fetch.js
  • tenacious-fetch/dist/tenacious-fetch.m.js

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 (tenacious-fetch) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

tenacious-fetch

package version package downloads standard-readme compliant package license make a pull request

Tiny fetch API wrapper to add support for retries with linear & exponential backoff and timeouts

Table of Contents

Install

This project uses node and npm.

$ npm install tenacious-fetch
$ # OR
$ yarn add tenacious-fetch

Usage

import tenaciousFetch from 'tenacious-fetch'

const url = 'https://jsonplaceholder.typicode.com/posts/1'
const normalFetchConfig = {
    method: 'GET',
    headers: {
      "Content-Type": "application/json charset=UTF-8"
    },
    // Others...
}

const additionalTenaciousFetchConfig = {
    fetcher: window.fetch,      // Fetch implementation to use, default is window.fetch
    retries: 3,                 // Number of retries, default is 1
    retryDelay: 1000 * 3,       // Delay in ms before retrying, default is 1000ms
    onRetry: ({retriesLeft, retryDelay, response}) => console.log(retriesLeft, retryDelay, response),
    retryStatus = [],           // Status codes of response that should trigger retry e.g. [500, 404] or just "500". 
                                // defaults to empty array
    retryOnFatalError = true    // If there a fatal request (no response status), we can choose
                                // to retry or not
    timeout = 1000 * 15,        // Timeout in ms before throwing a timeout error for the request.
                                // Defaults to no timeout (undefined).
    factor: .5                  // If factor is given, exponential backoff will be performed for retries, otherwise
                                // linear backoff is used  
}

const config = Object.assign({}, normalFetchConfig, additionalTenaciousFetchConfig)

tenaciousFetch(url, config).then(console.log).catch(console.error)

Contribute

  1. Fork it and create your feature branch: git checkout -b my-new-feature
  2. Commit your changes: git commit -am 'Add some feature'
  3. Push to the branch: git push origin my-new-feature
  4. Submit a pull request

License

MIT