Skip to main content

Signature

run<T>(fn, options?): Promise<RunResult<T>>

Key Options

  • Normalization and transformation: toError, mapError
  • Callbacks: onError, onSuccess, onFinally, onRetry, onAbort
  • Control: ignoreAbort, signal, timeout
  • Retries: retries, retryDelay, shouldRetry, jitter, backoffStrategy, maxDelay
  • Observability: logger
  • Cleanup: cleanup
  • Circuit Breaker: circuitBreaker

Basic Example

import { run } from "trybox";

const r = await run(() => fetch("/api").then((r) => r.json()));

Abort and Timeout

const controller = new AbortController();
const r = await run(() => fetch("/api", { signal: controller.signal }), {
  ignoreAbort: true,
  timeout: 1000,
  onAbort: (s) => console.log("aborted"),
});

Retries with Backoff and Jitter

const r = await run(() => fetch("/api"), {
  retries: 4,
  retryDelay: 300,
  backoffStrategy: "exponential",
  jitter: { ratio: 0.5, mode: "full" },
});

Per-Call Circuit Breaker

const r = await run(() => fetch("/api"), {
  circuitBreaker: { failureThreshold: 2, resetTimeout: 1000, halfOpenRequests: 1 },
});