Retry - @mvdlei/retry
The retry
package provides a utility for retrying asynchronous operations with customizable options.
Installation
npm install @mvdlei/retry
Example
import { IRetryOptions, Retry } from "@mvdlei/retry";
const main = async () => {
const r = Retry.init({
forever: true,
});
const fn = async () => {
console.log("start");
const random = Math.random();
if (random > 0.3) {
throw new Error("error");
}
await new Promise((resolve) => setTimeout(resolve, 1000));
console.log("end");
return "ok";
};
const res = await r.retry(fn);
console.log(res);
};
main();
API Reference
IRetryOptions
Options for configuring the retry behavior.
attempts
: The maximum number of retry attempts.delay
: The delay between retry attempts. It can be a number or an object withmin
,max
, anddefault
values.factor
: The exponential factor for calculating delays.minDelay
: The minimum delay between retries.maxDelay
: The maximum delay between retries.exponential
: Flag to indicate whether to use exponential backoff.forever
: Flag to retry forever until successful.randomize
: Flag to randomize the delay between retries.
Delays are in milliseconds.
Default Options
{
attempts: 3,
factor: 2,
delay: 1_000,
minDelay: 1_000,
maxDelay: 15_000,
exponential: true,
forever: false,
randomize: false,
}
IRetry
Interface defining the retry utility.
retry<T>(fn: () => Promise<T>, options?: IRetryOptions): Promise<T>
Retry a function until it succeeds or the maximum number of attempts is reached.
fn
: The function to retry.options
: Optional retry options.
retry<T>(fn: () => Promise<T>): Promise<T>
Retry a function until it succeeds or the maximum number of attempts is reached.
fn
: The function to retry.
Default options are used, or the options provided in Retry.init()
.
Retry
Class
The Retry
class implements the IRetry
interface.
Retry.init(options?: Partial<IRetryOptions>): IRetry
Static method to initialize a new Retry
instance with the provided options.
options
: Optional retry options.