← Back to Blog
Code Snippets August 5, 2026

Code Snippet — August 5, 2026 ### JavaScript: Retry with Exponential Back

🐍 Code Snippet — August 5, 2026

JavaScript: Retry with Exponential Backoff, Jitter & Circuit Breaker



setTimeout + recursive fetch is fragile — no jitter (thundering herd), no circuit breaker (keeps hammering dead services). This retry() wraps any async op with exponential backoff, 4 jitter strategies, circuit breaker (open → half-open → closed), retry predicates (retry 5xx/429, skip 4xx), per-call timeout, and retryFetch drop-in wrapper. Zero deps — Node, browser, Deno, Bun.

const response = await retry(() => api.fetchUser(id), {
  attempts: 5, baseDelay: 1000, maxDelay: 30000,
  strategy: "jitter",  // jitter | full_jitter | decorrelated | exponential
  shouldRetry: e => e.status >= 500 || e.status === 429,
  circuitBreaker: { threshold: 5, cooldownMs: 10000 },
  timeout: 5000,
  onRetry: (n, delay) => log(`retry ${n}, ${delay}ms`),
});

// Or use the drop-in fetch wrapper:
const res = await retryFetch("https://api.example.com/data");

💡 Drop in utils/retry.js — never write retry logic inline again. Full version w/ 10 self-tests in workspace.