@housinganywhere/async-retry
Problem
We needed a utility that helps us to retry an async function on it's Failure/Rejection and to be able to control the number of retries and the time interval between each retry also to block the retries in case of some logic provided.
Installation
yarn add @housinganywhere/async-retry
Or if you prefer npm!
npm i @housinganywhere/async-retry
Usage
import asyncRetry from '@housinganywhere/async-retry';
asyncRetry
expects two parameters
- The first parameter is a function that returns a
Promise
. - The second parameter is an options object (all of them are optional).
Options | Type | Optional? | Default | Description |
---|---|---|---|---|
retries | number | 5retries | number of retries | |
interval | number | 5000ms | base interval between retries | |
dontRetry | function | () => false | A function that returns a boolean value. This boolean value is to check if we want the retry to continue or not | |
onComplete | function | null | A hook function that's called on the completion of the retry also provides (err, count) in params | |
onFailure | function | null | A hook function that's called on the failure of the retry also provides (err) in params | |
onRetry | function | null | A hook function that's called on every retry also provides (err, count) in params |
Example
import asyncRetry from '@housinganywhere/async-retry';
const tryFetch = () => fetch('http://www.mocky.io/v2/5c59705d320000f31eba3880')
.then(res => {
if (res.status !== 200) {
return Promise.reject(new Error(`Rejected because of statusCode is ${res.status}`));
}
return res.json();
}).catch(e => Promise.reject(new Error(e)));
asyncRetry(tryFetch, {
retries: 3,
onRetry: (err, count) => console.log(`#### Retry #${count} with ${err}.`),
onComplete: count => console.log(`#### Completed after ${count} retries.`),
onFailure: err => console.log(`#### Failed because ${err}.`),
})
.then(response => {
console.log({response})
})
.catch(console.error);
Inspiration
- README structure Kent C. Dodds's Tweet
Thanks
- Christian Gill for reviewing and providing support.