31 lines
738 B
TypeScript
31 lines
738 B
TypeScript
export const sleep = (ms: number) => {
|
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
};
|
|
|
|
export async function asyncRunSafe<T = any>(
|
|
fn: Promise<T>,
|
|
): Promise<[Error] | [null, T]> {
|
|
try {
|
|
return [null, await fn];
|
|
} catch (e: any) {
|
|
return [e || new Error('unknown error')];
|
|
}
|
|
}
|
|
|
|
export async function fetchWithRetry<T = any>(
|
|
fn: Promise<T>,
|
|
retries = 3,
|
|
): Promise<[Error] | [null, T]> {
|
|
const [error, res] = await asyncRunSafe(fn);
|
|
if (error) {
|
|
if (retries > 0) {
|
|
const res = await fetchWithRetry(fn, retries - 1);
|
|
return res;
|
|
} else {
|
|
if (error instanceof Error) return [error];
|
|
return [new Error('unknown error')];
|
|
}
|
|
} else {
|
|
return [null, res];
|
|
}
|
|
}
|