19 lines
424 B
TypeScript
19 lines
424 B
TypeScript
export async function retryAsync<T>(
|
|
fn: () => Promise<T>,
|
|
attempts = 3,
|
|
initialDelayMs = 300,
|
|
): Promise<T> {
|
|
let lastErr: unknown;
|
|
for (let i = 0; i < attempts; i += 1) {
|
|
try {
|
|
return await fn();
|
|
} catch (err) {
|
|
lastErr = err;
|
|
if (i === attempts - 1) break;
|
|
const delay = initialDelayMs * 2 ** i;
|
|
await new Promise((r) => setTimeout(r, delay));
|
|
}
|
|
}
|
|
throw lastErr;
|
|
}
|