darf-chat/utils/index.ts
2025-10-17 11:11:14 +07:00

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];
}
}