I'm trying to implement an asynchronous worker with serverless lambda function with help of nestjs EventEmitter module.
Handler is getting invoked on emitting an event, but the function gets closed before the async / await call.
I have tried using both emit
and emitAsync
functions and different arguments for
@OnEvent(AccountEvents.NEW_ACCOUNT, {async:true, promisify:true})
Producer Snippet
public async execute(event: EventDetail): Promise<void> {
await this.eventEmitter.emitAsync(AccountEvents.NEW_ACCOUNT, event);
}
Listener Snippet
@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);
});
}
Expect Output : all the 3 log statements Actual Output : only first log statement (Log1)