> ## Documentation Index
> Fetch the complete documentation index at: https://acme-c84a37e5.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# run

> Executes an asynchronous operation and returns a safe result

## 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

```typescript theme={null}
import { run } from "tryo";

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

## Abort and Timeout

```typescript theme={null}
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

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

## Per-Call Circuit Breaker

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