在 rxjs 中合并事件(Nestjs - saga cqrs)
merge events in rxjs (Nestjs - saga cqrs)
我在 nestjs 中使用 cqrs
我有一个传奇,基本上是它的 rxjs 实现
@Saga()
updateEvent = (events$: Observable<any>): Observable<ICommand> => {
return events$.pipe(
ofType(
UpdatedEvent,
),
map((event) => {
return new otherCommand(event);
})
);
};
}
问题是如何合并扩展相同的事件 class
所以我只希望 1 个传奇来捕获所有事件而不是每个事件的传奇
我试过了
ofType(
UpdatedEvent,CreateEvent,DeleteEvent
),
但它不起作用,打字稿不允许这样做,而且由于通用类型,我得到了这个:
right-hand side of 'instanceof' is not callable
我的活动是这样的:
class UpdateEvent extends Base<UpdateDto>{
constructor(){super()}
}
class CreateEvent extends Base<CreateDto>{
constructor(){super()}
}
事件之间有区别的是Dtos
您可以使用 filter(x => x instanceof UpdatedEvent || x instanceof CreateEvent || x instanceof DeleteEvent)
而不是 ofType
如果这是您经常使用的模式,您可以轻松编写一个实用函数,例如 instanceOneOf
,它在数组中获取一堆值并在内部进行 instanceof
检查。
然后你可以做类似filter(x => instanceOneOf([UpdatedEvent, CreateEvent, DeleteEvent], x))
的事情
我在 nestjs 中使用 cqrs
我有一个传奇,基本上是它的 rxjs 实现
@Saga()
updateEvent = (events$: Observable<any>): Observable<ICommand> => {
return events$.pipe(
ofType(
UpdatedEvent,
),
map((event) => {
return new otherCommand(event);
})
);
};
}
问题是如何合并扩展相同的事件 class 所以我只希望 1 个传奇来捕获所有事件而不是每个事件的传奇
我试过了
ofType(
UpdatedEvent,CreateEvent,DeleteEvent
),
但它不起作用,打字稿不允许这样做,而且由于通用类型,我得到了这个:
right-hand side of 'instanceof' is not callable
我的活动是这样的:
class UpdateEvent extends Base<UpdateDto>{
constructor(){super()}
}
class CreateEvent extends Base<CreateDto>{
constructor(){super()}
}
事件之间有区别的是Dtos
您可以使用 filter(x => x instanceof UpdatedEvent || x instanceof CreateEvent || x instanceof DeleteEvent)
ofType
如果这是您经常使用的模式,您可以轻松编写一个实用函数,例如 instanceOneOf
,它在数组中获取一堆值并在内部进行 instanceof
检查。
然后你可以做类似filter(x => instanceOneOf([UpdatedEvent, CreateEvent, DeleteEvent], x))