Using Async Event Listener with Nestjs EventEmitter Module and Serverless functions

Viewed 691

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)

0 Answers
Related