A simple, easy-to-use and zero-dependency javascript async retry package.
$ yarn add @ajimae/retry
or using npm
$ npm install @ajimae/retry
Basic usage example
// import the package
import { retry } from '@ajimae/retry';
// create the retry wrapper
async function exec() {
return new Promise((resolve) => {
// simulate a network call that takes 1.5 seconds
setTimeout(() => {
resolve({
statusCode: 200,
message: 'success',
data: {
name: 'meeky',
age: 150
}
})
}, 1500);
});
};
// create a predicate function
function predicate(response, retryCount) {
/**
* access the retry count using the `retryCount` param,
* once the condition or conditions specified in this
* predicate function is met or the `maxRetries` is exhausted
* (retryCount == maxRetries) the retry exits.
*/
return (response.statusCode != 200);
}
(async function main() {
const result = await retry(exec, predicate, { maxRetries: 5 })
})();
Retry function
The package exposes a retry
function which is a simple function that takes in three (3) arguments and returns a generic promise.
// exposed retry function
function retry<T>(
fn: () => Promise<T>,
predicate: (response: T, retryCount: number) => boolean,
retryPolicy?: Partial<RetryPolicy>
): Promise<T>;
The retry function arguments
execute
- A function (usually an (anonymous) async function) that returns a promise-like value.
async function execute(): Promise<T> {
return T
}
predicate
- A predicate (function) takes in the response (the result from the
execute
function) as the first argument, aretryCount
as the second argument and returns a boolean.
function predicate(response: T, retryCount: number): boolean {
return true | false
}
retryPolicy
- An object that defines how the retry should be performed.
import { RetryPolicy } from '@ajimae/retry'
const retryPolicy: Partial<RetryPolicy> = {
maxRetries: number;
backoff: boolean;
retryDelay: number;
maxDelay: number;
}
Note:
The package also exposes the typescript type RetryPolicy
import { retry, RetryPolicy } from '@ajimae/retry'
Chukwuemeka Ajima - @ajimae
This project is licensed under the MIT License.
See LICENSE for more information.