sed*_*dhu 5 javascript eventemitter serverless-framework nestjs
我正在尝试在 Nestjs EventEmitter 模块的帮助下实现具有无服务器 lambda 函数的异步工作线程。
处理程序在发出事件时被调用,但该函数在 async/await 调用之前关闭。
我尝试过同时使用emitandemitAsync函数和不同的参数
@OnEvent(AccountEvents.NEW_ACCOUNT, {async:true, promisify:true})
制作人片段
public async execute(event: EventDetail): Promise<void> {
await this.eventEmitter.emitAsync(AccountEvents.NEW_ACCOUNT, event);
}
Run Code Online (Sandbox Code Playgroud)
听众片段
@OnEvent(AccountEvents.NEW_ACCOUNT)
public async handleAccountCreatedEvent(event: EventDetail): Promise<void> {
this.logger.log({ message: `Log1: ${AccountEvents.NEW_ACCOUNT} Handler`, event });
const message = await this.testAsync();
this.logger.log({ message });
this.logger.log({ message: 'Log 3: Event Processing Successfuly Completed' });
}
private testAsync(): Promise<string> {
return new Promise(res => {
setTimeout(() => {
res('Log 2: Promise resolved after one sec');
}, 1000);
});
}
Run Code Online (Sandbox Code Playgroud)
预期输出:所有 3 个日志语句实际输出:仅第一个日志语句 (Log1)
进行如下更改是有效的。基本上我们需要传递{ async: true, promisify: true }到注释@onEvent。
@OnEvent(AccountEvents.NEW_ACCOUNT, { async: true, promisify: true })
async handleNewAccountEvent(event: IEvent<RootAccountInterface>): Promise<void> {
const eventDetail: RootAccountInterface = event.data;
this.logger.log({ message: ` ${AccountEvents.NEW_ACCOUNT} Handler`, event });
await this.abc.logNewAccountCreation(eventDetail.accountId);
this.logger.log({ message: ` ${AccountEvents.NEW_ACCOUNT} Handled Successfully`, event });
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3074 次 |
| 最近记录: |