retry

Reintenta una operación asíncrona con backoff exponencial en caso de fallo.

#async #error-handling #resilience #utility
const sleep = (ms: number) =>
new Promise<void>((resolve) => setTimeout(resolve, ms));
export const retry = async <T>(
fn: () => Promise<T>,
retries = 3,
delayMs = 300,
): Promise<T> => {
let error: unknown;
for (let i = 0; i < retries; i++) {
try {
return await fn();
} catch (e) {
error = e;
if (i < retries - 1) {
await sleep(delayMs * (i + 1));
}
}
}
throw error;
};
// Usage
const data = await retry(
() => fetch('/api/data').then(r => r.json()),
3, // max retries
500 // base delay in ms
);

Comparte este snippet

Comentarios