جاوااسکریپت - مدیریت عاملیتهای کلی Module EventEmitter - NestJS
من نمیدانم چگونه با منتشرکننده زیر برخورد کنم:
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 ذکر میکنند که میتوانم از یک آرایه به عنوان یک wildcard استفاده کنم، اما چگونه میتوانم بین «create» و «update» در listener تمایز قائل شوم؟ تنها چیزی که به نظر میرسد در data دریافت میکنم، شیء job است.
ضمناً، من بهدرستی EventEmitterModule را در واردات خود قرار دادهام:
EventEmitterModule.forRoot({
wildcard: true
}),
پاسخ شماره ۱
فکر میکنم این ممکن نیست. شما باید دو شنونده متفاوت ایجاد کنید:
@OnEvent('job.create')
handleJobCreateEvent(data: CreateJobDto) {
console.log(data);
});
@OnEvent('job.update')
handleJobUpdateEvent(data: CreateJobDto) {
console.log(data);
});
پاسخ شماره ۲
برای این منظور، ما یک ویژگی emitter.event داریم که رویداد در حال اجرا را مشخص میکند. بنابراین، بستهبندیکنندهی emitter در 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
