1.0.6 • Published 1 year ago

@mrflish/retry v1.0.6

Weekly downloads
-
License
ISC
Repository
github
Last release
1 year ago

Retry

A typesafe promise based retry pattern

retry function

The retry function allows you to quickly retry a promise if it fails. Import it into your project as follows

import retry from "@mrflish/retry";

the retry function takes several parameters the first one is the number of tries before giving up and returning the error that the function threw

const result = await retry(num_of_tries, func_name, [func_param1, func_param2, ...], options);

retry will fail and throw if the function does not resolve before the maximum number of tries reaches its limit.

import retry from "@mrflish/retry";

let count = 1;
const notSureIllResolve = async (param1: string, param2: number, param3: boolean[]) => {
	if(count < 5) 
		throw new Error(`Not yet... [${count++}]`);
	return `About time ! [${count}]`;
};


try {
    //the number of tries is not high enough to allow the function to resolve.
    //retry will throw at the end of the 4th try.
    const MAX_TRIES = 4;
    const result = await retry(MAX_TRIES, notSureIllResolve, ["value of param1", 42, [true, false]]);
    console.log(result);
    
} catch(error: any){
    console.log(error.message);
    //=> "Not yet... [4]"
}

retry will resolve if the function resolves before the maximum number of tries reaches its limit

import retry from "@mrflish/retry";

let count = 1;
const notSureIllResolve = async (param1: string, param2: number, param3: boolean[]) => {
	if(count < 5) {
		throw new Error(`Not yet... [${count++}]`);
	}
	return `About time ! [${count}]`;
};


try {
    //retry will resolve at the 5th try
    //MAX_TRIES is high enough to let the the function resolve
    const MAX_TRIES = 6;
    const result = await retry(MAX_TRIES, notSureIllResolve, ["value of param1", 42, [true, false]]);
    console.log(result);
    //=> "About time ! [5]"
    
} catch(error: any){
    console.log(error.message);
}

Retry class

The Retry class allows you to have more information about the execution of the function Import it into your project as follows

import { Retry } from "@mrflish/retry";

the Retry construcor takes several parameters the first one is the function to try to run

import { Retry } from "@mrflish/retry";
const execute = new Retry(func_name, [func_param1, func_param2, ...], options);
try {
	//the number of tries is not high enough to allow the function to resolve.
	//retry will throw at the end of the 4th try.
	const MAX_TRIES = 4;

    //Will trigger this event each time it tries again
	execute.on("retry", (countDown, currentInterval) => {
		/* Some things to do on each retry here */
	});

    //Will try trigger this event each time it fails
    execute.on("failure", (error, countDown, currentInterval) => {
		/* Some things to do on each failure here */
	});

	const result = await execute.try(MAX_TRIES);

	console.log(result);
		
} catch(error: any){
	console.log(error.message);
	//=> "Not yet... [4]"
}

options

Whether you use the function or the class, you can specify two options:

  • interval

    The interval option allows you to specify how long (in milliseconds) to wait before retrying after a failure. Set to 100ms by default
const MAX_TRIES = 4;
const execute = new Retry(notSureIllResolve, ["value of param1", 42, [true, false]], { interval: 500 });

execute.on("retry", (countDown, currentInterval) => {
    console.log(count, currentInterval);
    console.log(`${count} -> ${currentInterval}`);
    /* Some things to do on each retry here */
});

const result = await execute.try(MAX_TRIES);

//OUTPUT
//4 -> 500
//3 -> 500
//2 -> 500
//Not yet... [4]

BinaryExponential

If the binaryExponential option is set to true, each new trial will have its time interval doubled. Set to false by default

const MAX_TRIES = 5;
const execute = new Retry(notSureIllResolve, ["value of param1", 42, [true, false]], { interval: 500, BinaryExponential: true });

execute.on("retry", (countDown, currentInterval) => {
    console.log(count, currentInterval);
    console.log(`${count} -> ${currentInterval}`);
    /* Some things to do on each retry here */
});

const result = await execute.try(MAX_TRIES);

//OUTPUT
//5 -> 500
//4 -> 1000
//3 -> 2000
//2 -> 4000
//About time ! [5]
1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago