事件发射器多次发射,Nest JS

She*_*lva 0 eventemitter nestjs

我是事件发射器的新手,并尝试在我的 Nest JS 项目中实现它们,问题是同一个事件被触发多次(准确地说是 6 次),有什么原因以及如何解决这个问题吗?

这是service.ts文件中用于发出事件的 代码片段。this.eventEmitter.emit('company.created', companyCreatedHistory);

这是我的 Event ,位于listener.ts文件中

@Injectable()
export class EntityCreatedListener {
  constructor(private readonly historyService: HistoriesService) {}

  @OnEvent('company.created')
  handleCompanyCreatedEvent(eventObject: typeof eventEmitterObject) {
    console.log('Hi')
    this.createAuditLog(eventObject, 'company.created');
  }
Run Code Online (Sandbox Code Playgroud)

引用自: https: //github.com/nestjs/nest/tree/master/sample/30-event-emitter https://www.npmjs.com/package/@nestjs/event-emitter

Cal*_*tey 5

因此,查看您的代码,我猜测问题是因为您EntityCreatedListener的应用程序中有不同的飞行实例。您可能已实例化它 6 次,这就是该事件触发 6 次的原因。

所有这些实例都EntityCreatedListener将侦听该company.created事件,并在该方法调用触发该事件时触发this.eventEmitter.emit('company.created', companyCreatedHistory);

修复方法是:检查应用程序中的模块,并确保EntityCreatedListener模块代码此部分的提供程序导入中的多个位置未导入该模块@Module({imports: [],controllers: [],providers: []})。仅保留 的一个实例EntityCreatedListener(因此,如果您想在多个地方使用,则应仅将其导入到一个模块中,并通过导出它来共享到其他模块)