API reference › @evolu/common › Task › waitForAbort
const waitForAbort: Task<never>;
Defined in: packages/common/src/Task.ts:4903
Waits until the current Run aborts, then rejects with its AbortError.
Use it to keep long-running services and Run-owned resources alive until their owning Run shuts down.
Example
import {
assertEqual,
assertFalse,
assertType,
assertTrue,
AbortError,
createRun,
ok,
waitForAbort,
type Task,
} from "@evolu/common";
interface ServerDep {
readonly port: number;
}
interface Server extends AsyncDisposable {}
const serverStarted = Promise.withResolvers<void>();
let serverStopped = false;
const startServer: Task<Server, never, ServerDep> = (run) => {
assertEqual(run.deps.port, 3000);
serverStarted.resolve();
return ok({
[Symbol.asyncDispose]: () => {
serverStopped = true;
return Promise.resolve();
},
});
};
const serve = (): Task<never, never, ServerDep> => async (run) => {
await using _ = await run.ok(startServer);
return await run(waitForAbort);
};
assertType<Task<never, never, ServerDep>, ReturnType<typeof serve>>();
await using run = createRun();
const fiber = run.abortable(serve(), { port: 3000 });
await serverStarted.promise;
fiber.abort();
const result = await fiber;
assertFalse(result.ok);
assertTrue(AbortError.is(result.error));
assertTrue(serverStopped);