# Events The event-dispatch API mixed into every context. Harness event declarations and their dispatch modes are generated into each owning [subsystem page](../subsystems/core.md). ### ctx.parallel(name, ...args) ```ts cordis-catalog /** * Dispatch an event, running all listeners concurrently. * * @param name — the event name. * @param args — arguments passed to every listener. * @returns a promise resolving once every listener has settled. */ parallel(name: K, ...args: Parameters): Promise parallel(thisArg: NoInfer>, name: K, ...args: Parameters): Promise ``` Dispatch an event, running all listeners concurrently. - `name` — the event name. - `args` — arguments passed to every listener. **Returns** a promise resolving once every listener has settled. [Source](../../vendor/cordis/src/events.ts#L44) ### ctx.emit(name, ...args) ```ts cordis-catalog /** * Dispatch an event synchronously, ignoring listener return values. * * @param name — the event name. * @param args — arguments passed to every listener. */ emit(name: K, ...args: Parameters): void emit(thisArg: NoInfer>, name: K, ...args: Parameters): void ``` Dispatch an event synchronously, ignoring listener return values. - `name` — the event name. - `args` — arguments passed to every listener. [Source](../../vendor/cordis/src/events.ts#L53) ### ctx.serial(name, ...args) ```ts cordis-catalog /** * Dispatch an event, awaiting listeners in order until one bails. * * @param name — the event name. * @param args — arguments passed to each listener. * @returns the first bail value (non-null, non-false, non-undefined), if any. */ serial(name: K, ...args: Parameters): Promisify> serial(thisArg: NoInfer>, name: K, ...args: Parameters): Promisify> ``` Dispatch an event, awaiting listeners in order until one bails. - `name` — the event name. - `args` — arguments passed to each listener. **Returns** the first bail value (non-null, non-false, non-undefined), if any. [Source](../../vendor/cordis/src/events.ts#L63) ### ctx.bail(name, ...args) ```ts cordis-catalog /** * Dispatch an event, calling listeners in order until one bails. * * @param name — the event name. * @param args — arguments passed to each listener. * @returns the first bail value (non-null, non-false, non-undefined), if any. */ bail(name: K, ...args: Parameters): ReturnType bail(thisArg: NoInfer>, name: K, ...args: Parameters): ReturnType ``` Dispatch an event, calling listeners in order until one bails. - `name` — the event name. - `args` — arguments passed to each listener. **Returns** the first bail value (non-null, non-false, non-undefined), if any. [Source](../../vendor/cordis/src/events.ts#L73) ### ctx.waterfall(name, ...args) ```ts cordis-catalog /** * Dispatch an event whose last argument is a `next` continuation. * * Each listener wraps the rest of the chain: calling `next()` invokes the * next listener (finally the built-in behavior); not calling it vetoes. * * @param name — the event name. * @param args — listener arguments; the final one is the innermost `next`. * @returns the outermost listener's return value. */ waterfall(name: K, ...args: Parameters): ReturnType waterfall(thisArg: NoInfer>, name: K, ...args: Parameters): ReturnType ``` Dispatch an event whose last argument is a `next` continuation. Each listener wraps the rest of the chain: calling `next()` invokes the next listener (finally the built-in behavior); not calling it vetoes. - `name` — the event name. - `args` — listener arguments; the final one is the innermost `next`. **Returns** the outermost listener's return value. [Source](../../vendor/cordis/src/events.ts#L86) ### ctx.on(name, listener, options?) ```ts cordis-catalog /** * Register an event listener owned by the current fiber. * * @param name — the event name to listen for. * @param listener — called with the dispatch arguments. * @param options — listener options; a boolean is shorthand for `prepend`. * @returns a disposer removing the listener; `true` if it was still registered. */ on(name: K, listener: Events[K], options?: boolean | EventOptions): () => boolean ``` Register an event listener owned by the current fiber. - `name` — the event name to listen for. - `listener` — called with the dispatch arguments. - `options` — listener options; a boolean is shorthand for `prepend`. **Returns** a disposer removing the listener; `true` if it was still registered. [Source](../../vendor/cordis/src/events.ts#L97) ### ctx.once(name, listener, options?) ```ts cordis-catalog /** * Same as `on()`, but the listener disposes itself after its first call. * * @param name — the event name to listen for. * @param listener — called at most once with the dispatch arguments. * @param options — listener options; a boolean is shorthand for `prepend`. * @returns a disposer removing the listener; `true` if it was still registered. */ once(name: K, listener: Events[K], options?: boolean | EventOptions): () => boolean ``` Same as `on()`, but the listener disposes itself after its first call. - `name` — the event name to listen for. - `listener` — called at most once with the dispatch arguments. - `options` — listener options; a boolean is shorthand for `prepend`. **Returns** a disposer removing the listener; `true` if it was still registered. [Source](../../vendor/cordis/src/events.ts#L106) ## EventOptions Options accepted by `ctx.on()` and `ctx.once()`. ```ts cordis-catalog /** Options accepted by `ctx.on()` and `ctx.once()`. */ interface EventOptions { /** Add the listener before existing listeners for the same event. */ prepend?: boolean /** Receive the event regardless of context filter checks. */ global?: boolean } ``` [Source](../../vendor/cordis/src/events.ts#L112) ## DispatchMode Event dispatch strategy used by the event service. `emit` runs synchronous listeners without awaiting them, `parallel` awaits all listeners together, `serial` awaits them in order until one bails, `bail` stops on the first synchronous bail value, and `waterfall` composes listeners around a final `next` callback. ```ts cordis-catalog /** * Event dispatch strategy used by the event service. * * `emit` runs synchronous listeners without awaiting them, `parallel` awaits * all listeners together, `serial` awaits them in order until one bails, * `bail` stops on the first synchronous bail value, and `waterfall` composes * listeners around a final `next` callback. */ type DispatchMode = 'emit' | 'parallel' | 'serial' | 'bail' | 'waterfall' ``` [Source](../../vendor/cordis/src/events.ts#L32)