API reference › @evolu/common › Task › 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);
});
});