[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Task](https://evolu.dev/docs/api-reference/common/Task) › createDeferred

```ts
function createDeferred<T, E>(): Deferred<T, E>;
```

Defined in: [packages/common/src/Task.ts:5394](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Task.ts#L5394)

Creates a [Deferred](https://evolu.dev/docs/api-reference/common/Task/interfaces/Deferred).

### Example

```ts
import {
  assertFalse,
  assertOk,
  assertType,
  assertTrue,
  createDeferred,
  createRun,
  ok,
  type Result,
} from "@evolu/common";

await using run = createRun();
const deferred = createDeferred<string>();

const fiber = run(deferred.task);
assertTrue(deferred.resolve(ok("ready")));

const result = await fiber;
assertType<Result<string>, typeof result>();
assertOk(result, "ready");

// A Deferred is one-shot: later resolutions are ignored, and future
// waiters receive the original Result.
assertFalse(deferred.resolve(ok("late")));
assertOk(await run(deferred.task), "ready");
```

### Aborting a waiter

```ts
import {
  assertFalse,
  assertTrue,
  AbortError,
  createDeferred,
  createRun,
} from "@evolu/common";

await using run = createRun();
const deferred = createDeferred<string>();

const fiber = run.abortable(deferred.task);
fiber.abort({ type: "NoLongerNeeded" });

const result = await fiber;
assertFalse(result.ok);
assertTrue(AbortError.is(result.error));
```