retry
Retry an async operation with exponential backoff on failure.
#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;};
// Usageconst data = await retry( () => fetch('/api/data').then(r => r.json()), 3, // max retries 500 // base delay in ms);