Skip to content

Event事件

VonaJS 提供了事件机制,由事件事件监听器组成

一个事件可以有多个事件监听器,这些事件监听器在执行时采用洋葱模型

创建Event

比如,在模块 demo-student 中创建一个 Event: echo,触发事件时传入事件参数Hello World

1. Cli命令

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

2. 菜单命令

TIP

右键菜单 - [模块路径]: Vona Bean/Event

Event定义

typescript
export type TypeEventEchoData = string;

export type TypeEventEchoResult = string | undefined;

@Event()
export class EventEcho extends BeanEventBase<
  TypeEventEchoData,
  TypeEventEchoResult
> {}
  • TypeEventEchoData: 定义参数类型
  • TypeEventEchoResult: 定义结果类型

触发异步事件: emit

1. emit

触发事件时传入事件参数Hello World,并返回结果

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: 通过 Scope 对象获取echo事件实例

2. 缺省方法

在触发事件时可以提供缺省方法

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);
  }
}
  • 缺省方法参数data:事件监听器在执行时可以修改事件参数,所以需要使用data参数,从而确保当前方法使用的是最新的事件参数

触发同步事件: emitSync

1. emitSync

触发事件时传入事件参数Hello World,并返回结果

diff
class ControllerStudent {
  @Web.get('test')
  async test() {
+   const result = this.scope.event.echo.emitSync('Hello World');
    console.log(result);
  }
}
  • this.scope.event.echo: 通过 Scope 对象获取echo事件实例

2. 缺省方法

在触发事件时可以提供缺省方法

diff
class ControllerStudent {
  @Web.get('test')
  async test() {
+   const result = this.scope.event.echo.emitSync('Hello World', data => {
+     return `default: ${data}`;
+   });
    console.log(result);
  }
}
  • 缺省方法参数data:事件监听器在执行时可以修改事件参数,所以需要使用data参数,从而确保当前方法使用的是最新的事件参数

基于 MIT 许可发布