jws-backend/src/utils/func.ts
2024-10-22 11:53:39 +07:00

25 lines
510 B
TypeScript

const MAX_RETRY = 3;
/**
* @param func - Function to do.
* @param cond - Retry condition callback function. Stop when the function return false,
*/
export async function retry<T extends () => any>(
func: T,
cond = (error: any) => !!error,
): Promise<ReturnType<T>> {
let retries = 0;
while (retries++ < MAX_RETRY - 1) {
try {
return await func();
} catch (error) {
if (cond(error)) {
retries++;
continue;
}
throw error;
}
}
return func();
}