API reference@evolu/commonTask › callback

function callback<T, E>(
  callback: CallbackWithTeardown<{
    deps: RunDeps;
    err: Callback<E>;
    ok: Callback<T>;
    signal: AbortSignal;
  }>,
): Task<T, E>;

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

Creates a Task from a callback-based API.

Use this to wrap callback-style APIs (event listeners, Node.js callbacks, etc.) into Tasks with proper abort handling.

Optionally return a teardown function that runs on abort.

Example

// The sleep helper is implemented using callback:
const sleep = (duration: Duration): Task<void> =>
  callback(({ ok, deps: { time } }) => {
    const id = time.setTimeout(ok, durationToMillis(duration));
    return () => time.clearTimeout(id);
  });

// Wrap an event listener — use signal directly
const waitForClick = (element: HTMLElement): Task<MouseEvent> =>
  callback(({ ok, signal }) => {
    element.addEventListener("click", ok, { once: true, signal });
  });

// Wrap Node.js callback API
const readFile = (path: string): Task<string, NodeJS.ErrnoException> =>
  callback(({ ok, err }) => {
    fs.readFile(path, "utf8", (error, data) => {
      if (error) err(error);
      else ok(data);
    });
  });