Skip to content

Events

VonaJS provides an event mechanism, consisting of Event and Event listener

An event can have multiple event listeners, which execute using the onion model

Create Event

For example, create an event: echo in the module demo-student, passing the event parameter Hello World when the event is emitted

1. Cli command

bash
$ vona :create:bean event echo --module=demo-student

2. Menu command

TIP

Context Menu - [Module Path]: Vona Bean/Event

Event Definition

typescript
export type TypeEventEchoData = string;

export type TypeEventEchoResult = string | undefined;

@Event()
export class EventEcho extends BeanEventBase<
  TypeEventEchoData,
  TypeEventEchoResult
> {}
  • TypeEventEchoData: Defines the parameter type
  • TypeEventEchoResult: Defines the result type

Emitting Asynchronous Event: emit

1. emit

Passing the event parameter Hello World when emitting the event, and returning the result

diff
class ControllerStudent {
  @Web.get('test')
  async test() {
+   const result = await this.scope.event.echo.emit('Hello World');
    console.log(result);
  }
}
  • this.scope.event.echo: Gets the echo event instance through the Scope object

2. Default Method

A default method can be provided when emitting the event

diff
class ControllerStudent {
  @Web.get('test')
  async test() {
+   const result = await this.scope.event.echo.emit('Hello World', async data => {
+     return `default: ${data}`;
+   });
    console.log(result);
  }
}
  • Default method parameter data: Event listeners can modify event parameters during execution, so the data parameter is required to ensure that the current method uses the latest event parameters

Emitting Synchronous Event: emitSync

1. emitSync

Pass the event parameter Hello World when emitting the event and return the result

diff
class ControllerStudent {
  @Web.get('test')
  async test() {
+   const result = this.scope.event.echo.emitSync('Hello World');
    console.log(result);
  }
}
  • this.scope.event.echo: Get the echo event instance through the Scope object

2. Default method

A default method can be provided when emitting the event

diff
class ControllerStudent {
  @Web.get('test')
  async test() {
+   const result = this.scope.event.echo.emitSync('Hello World', data => {
+     return `default: ${data}`;
+   });
    console.log(result);
  }
}
  • Default method parameter data: Event listeners can modify event parameters during execution, so the data parameter is required to ensure that the current method uses the latest event parameters

Released under the MIT License.