【问题标题】:merge events in rxjs (Nestjs - saga cqrs)在 rxjs 中合并事件(Nestjs - saga cqrs)
【发布时间】:2021-03-27 08:06:44
【问题描述】:

我正在使用带有nestjs的cqrs

我有一个传奇,基本上是它的 rxjs 实现

 @Saga()
  updateEvent = (events$: Observable<any>): Observable<ICommand> => {
    return events$.pipe(
      ofType(
        UpdatedEvent,
      ),
      map((event) => {

        return new otherCommand(event);
      })
    );
  };
}

问题是如何合并所有扩展同一个类的事件 所以我只希望 1 个 saga 来捕获所有事件,而不是每个事件的 saga

我试过了

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

【问题讨论】:

    标签: typescript rxjs nestjs cqrs


    【解决方案1】:

    您可以使用filter(x =&gt; x instanceof UpdatedEvent || x instanceof CreateEvent || x instanceof DeleteEvent),而不是使用ofType

    如果这是您经常使用的模式,您可以轻松编写一个实用函数,例如 instanceOneOf,它接受数组中的一堆值并在内部执行 instanceof 检查。

    然后你可以做类似filter(x =&gt; instanceOneOf([UpdatedEvent, CreateEvent, DeleteEvent], x))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2020-02-15
      • 2020-04-29
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      相关资源
      最近更新 更多