Tiny fetch API wrapper to add support for retries with linear & exponential backoff and timeouts
This project uses node and npm.
$ npm install tenacious-fetch
$ # OR
$ yarn add tenacious-fetch
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)
- Fork it and create your feature branch:
git checkout -b my-new-feature
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request
MIT