1

我不知道如何处理以下发射器:

async create(createJobDto: CreateJobDto)  {
    this.eventEmitter.emit(
        ['job','create'],
        createJobDto,
    );
}

async update(createJobDto: CreateJobDto)  {
    this.eventEmitter.emit(
        ['job','update'],
        createJobDto,
    );
}

听众:

@OnEvent('job.**')
handleJobEvent(data: CreateJobDto) {
    console.log(data);
});

NestJS 和 EventEmitter2 文档提到我可以使用数组作为通配符,但是如何区分侦听器中的“创建”和“更新”?我似乎得到的data只是工作对象。

PS 我正确地在我的导入中包含了 EventEmitterModule:

EventEmitterModule.forRoot({
  wildcard: true
}),
4

3 回答 3

0

我认为这是不可能的。您必须创建两个不同的侦听器:

@OnEvent('job.create')
handleJobCreateEvent(data: CreateJobDto) {
    console.log(data);
});

@OnEvent('job.update')
handleJobUpdateEvent(data: CreateJobDto) {
    console.log(data);
});
于 2021-04-30T11:49:01.210 回答
0

为此,我们有一个emitter.event属性来标识当前触发的事件。所以 NestJS 发射器包装器也应该有它。这是文档中的一个示例:

emitter.on('foo.*', function(value1, value2) {
  console.log(this.event, value1, value2);
});

emitter.emit('foo.bar', 1, 2); // 'foo.bar' 1 2
emitter.emit(['foo', 'bar'], 3, 4); // 'foo.bar' 3 4

emitter.emit(Symbol(), 5, 6); // Symbol() 5 6
emitter.emit(['foo', Symbol()], 7, 8); // ['foo', Symbol()] 7 8
于 2021-05-09T15:16:38.007 回答
0

根据您的共享链接:http://%20docs.nestjs.com/techniques/events#listening-to-events,正确的语法如下所示:

@OnEvent('order.*')

在你的情况下:

@OnEvent('工作。*')

于 2021-05-11T06:42:29.923 回答