Async retry library for NodeJS built on top of retry
The example below will call the getData function up to 3 times (The initial call and up to another 2 retries). It uses an exponential backoff between attempts
const asyncRetry = require('authbox.async-retry');
const getData = async () => {
// Do your work here
};
return asyncRetry(getData, {
retries: 2,
});
The second parameter of asyncRetry is the options object. This parameter is optional, but if specified supports the following options:
Option | Default | Description |
---|---|---|
retries | 10 | The number of times to retry the function |
factor | 2 | The exponential factor to use |
minTimeout | 1000 | The number of milliseconds before starting the first retry |
maxTimeout | Infinity | The maximum number of milliseconds between two retries |
randomize | false | Randomizes the timeouts by multiplying with a factor between 1 to 2 |
onError | () => true | A function (see below) called then function errors |
All options but onError
are from retry
The options of asyncRetry takes an onError
function, which takes the number of the current attempt and the error that occured.
This function is expected to return a boolean result to signify whether to continue retrying.
The following example shows how to abort processing if a 401 error has occured more than once:
asyncRetry(callApi, {
onError: (attempt, err) => {
if(err.statusCode === 401 && attempt === 2) {
return false; // give up trying, the error is unrecoverable
}
return true; // keep retrying until success or retries limit reached
},
});
It is also possible to abort retrying within the function itself by setting bail = true;
on the error being thrown.