这是我的代码: 事件发射器.module.ts
import { Module } from '@nestjs/common';
import { EventEmitterModule } from '@nestjs/event-emitter';
import { EmitterService } from './event-emitter.service';
@Module({
imports: [EventEmitterModule.forRoot()],
providers: [EmitterService],
exports: [EmitterService],
})
export class EmitterModule {}
事件发射器.service.ts
import { Injectable } from '@nestjs/common';
import { EventEmitter2, OnEvent } from '@nestjs/event-emitter';
@Injectable()
export class EmitterService {
constructor(private eventEmitter: EventEmitter2) {}
emitEvent() {
console.log('first');
this.eventEmitter.emit('msg.sent');
}
@OnEvent('msg.sent')
listentToEvent() {
console.log('second');
}
}
测试.controller.ts
import { Controller, Get } from '@nestjs/common';
import { EmitterService } from '../event-emitter/event-emitter.service';
@Controller('test')
export class TestController {
constructor(private readonly emitterService: EmitterService) {}
@Get('/event-emitter')
async testEventEmitter() {
this.emitterService.emitEvent();
}
}
当我使用事件发射器服务时,有 2 个用于模块的选项,每个选项记录不同的结果:
第一个选项: 测试.module.ts
import { Module } from '@nestjs/common';
import { EmitterModule } from '../event-emitter/event-emitter.module';
import { EmitterService } from '../event-emitter/event-emitter.service';
import { TestController } from './test.controller';
@Module({
imports: [],
controllers: [TestController],
providers: [EmitterService],
exports: [],
})
export class TestModule {}
第二个选项: 测试.module.ts
import { Module } from '@nestjs/common';
import { EmitterModule } from '../event-emitter/event-emitter.module';
import { EmitterService } from '../event-emitter/event-emitter.service';
import { TestController } from './test.controller';
@Module({
imports: [EmitterModule],
controllers: [TestController],
providers: [],
exports: [],
})
export class TestModule {}
我不知道为什么第一个选项调用listintToEvent() 2次。感谢您的关注。
这可能对某人有帮助: 我的服务不在请求范围内,但事件处理程序被调用两次! 我发现该服务被启动了两次,这是因为我在提供程序的数组中提到了两次,一次使用字符串引用,一次使用类引用
{
provide: 'IStoreBalanceRepository',
useClass: StoreBalanceRepository,
},
StoreBalanceRepository
所以订阅完成了两次! 希望这有帮助!