이벤트
모든 컨텍스트에 혼합되는 이벤트 디스패치 API입니다. Harness 이벤트 선언과 해당 디스패치 모드는 각 소유 하위 시스템 페이지에 생성됩니다.
ctx.parallel(name, ...args)
/**
* 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<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): Promise<void>
parallel<K extends keyof Events>(thisArg: NoInfer<ThisType<Events[K]>>, name: K, ...args: Parameters<Events[K]>): Promise<void>이벤트를 디스패치하고 모든 리스너를 동시에 실행합니다.
name— 이벤트 이름입니다.args— 모든 리스너에 전달되는 인수입니다.
반환값 모든 리스너가 완료되면 이행되는 promise입니다.
ctx.emit(name, ...args)
/**
* Dispatch an event synchronously, ignoring listener return values.
*
* @param name — the event name.
* @param args — arguments passed to every listener.
*/
emit<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): void
emit<K extends keyof Events>(thisArg: NoInfer<ThisType<Events[K]>>, name: K, ...args: Parameters<Events[K]>): void리스너의 반환값을 무시하고 이벤트를 동기적으로 디스패치합니다.
name— 이벤트 이름입니다.args— 모든 리스너에 전달되는 인수입니다.
ctx.serial(name, ...args)
/**
* 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<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): Promisify<ReturnType<Events[K]>>
serial<K extends keyof Events>(thisArg: NoInfer<ThisType<Events[K]>>, name: K, ...args: Parameters<Events[K]>): Promisify<ReturnType<Events[K]>>이벤트를 디스패치하고, 하나가 bail할 때까지 리스너를 순서대로 기다립니다.
name— 이벤트 이름입니다.args— 각 리스너에 전달되는 인수입니다.
반환값 있는 경우 첫 번째 bail 값(non-null, non-false, non-undefined)입니다.
ctx.bail(name, ...args)
/**
* 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<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): ReturnType<Events[K]>
bail<K extends keyof Events>(thisArg: NoInfer<ThisType<Events[K]>>, name: K, ...args: Parameters<Events[K]>): ReturnType<Events[K]>이벤트를 디스패치하고, 하나가 bail할 때까지 리스너를 순서대로 호출합니다.
name— 이벤트 이름입니다.args— 각 리스너에 전달되는 인수입니다.
반환값 있는 경우 첫 번째 bail 값(non-null, non-false, non-undefined)입니다.
ctx.waterfall(name, ...args)
/**
* 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<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): ReturnType<Events[K]>
waterfall<K extends keyof Events>(thisArg: NoInfer<ThisType<Events[K]>>, name: K, ...args: Parameters<Events[K]>): ReturnType<Events[K]>마지막 인수가 next 연속 호출인 이벤트를 디스패치합니다.
각 리스너는 체인의 나머지 부분을 감쌉니다. next()을 호출하면 다음 리스너(마지막에는 기본 제공 동작)가 호출되고, 호출하지 않으면 거부됩니다.
name— 이벤트 이름입니다.args— 리스너 인수이며, 마지막 인수는 가장 안쪽의next입니다.
반환값 가장 바깥쪽 리스너의 반환값입니다.
ctx.on(name, listener, options?)
/**
* 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<K extends keyof Events>(name: K, listener: Events[K], options?: boolean | EventOptions): () => boolean현재 fiber가 소유하는 이벤트 리스너를 등록합니다.
name— 수신할 이벤트 이름입니다.listener— 디스패치 인수와 함께 호출됩니다.options— 리스너 옵션이며, boolean은prepend의 축약형입니다.
반환값 리스너를 제거하는 disposer이며, 여전히 등록되어 있었다면 true입니다.
ctx.once(name, listener, options?)
/**
* 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<K extends keyof Events>(name: K, listener: Events[K], options?: boolean | EventOptions): () => booleanon()와 같지만, 리스너는 처음 호출된 후 자신을 해제합니다.
name— 수신할 이벤트 이름입니다.listener— 디스패치 인수와 함께 최대 한 번 호출됩니다.options— 리스너 옵션이며, boolean은prepend의 축약형입니다.
반환값 리스너를 제거하는 disposer이며, 여전히 등록되어 있었다면 true입니다.
EventOptions
ctx.on() 및 ctx.once()에서 허용하는 옵션입니다.
/** 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
}DispatchMode
이벤트 서비스에서 사용하는 이벤트 디스패치 전략입니다.
emit은 리스너를 기다리지 않고 동기 리스너를 실행하고, parallel는 모든 리스너를 함께 기다리며, serial은 하나가 bail할 때까지 순서대로 기다리고, bail은 첫 번째 동기 bail 값에서 중지하며, waterfall은 최종 next 콜백을 중심으로 리스너를 구성합니다.
/**
* 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'