API reference@evolu/commonTask › createDeferred

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

Defined in: packages/common/src/Task.ts:5394

Creates a Deferred.

Example

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

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));