代码之家  ›  专栏  ›  技术社区  ›  prabhat gundepalli

如何合并来自2个ngrx效果的数据

  •  1
  • prabhat gundepalli  · 技术社区  · 8 年前

    我有两个效果,其中两个都是在不同的用户操作中调用的。它们有相同的返回类型。我想将一个效果中的数据合并到另一个效果数据中。(然后删除其中的重复记录)

        loadQueues$ =  this.actions$.ofType(qeueActions.LOAD_QUEUE_DETAILS).pipe(
    map((action: qeueActions.LoadQueues) => action.payload),
    switchMap( (criteria) => {
      return this.api.listMessagesByCriteria(criteria).pipe(
        map( data => new qeueActions.LoadQueuesSuccess(data)),
        catchError(error => of(new qeueActions.LoadQueuesFail(error)))
      );
    })// switchMap
    ); // pipe
    

    第二个效果是

       @Effect()
     loadQueuesByDuration$ =  
     this.actions$.ofType(qeueActions.LOAD_QUEUE_DETAILS_BY_DURATION).pipe(
     map((action: qeueActions.LoadQueuesbyDuration) => action.payload),
      switchMap( (duration) => {
       return this.api.listMessageHeadersByDuration(duration).pipe(
        map( data => new qeueActions.LoadQueuesSuccess(data)),
        catchError(error => of(new qeueActions.LoadQueuesFail(error)))
      );
    })// switchMap
    ); // pipe
    

    两个成功调用都是相同的(所以这就像将当前数据合并到以前的数据中一样),我们如何实现上述两个效果数据的合并?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Wayne Maurer    8 年前

    移除 @Effect() 装饰师来自 loadQueuesByDuration$ 加载队列持续时间$ .

    然后用 效果() 装饰者:

    import { merge } from 'rxjs';
    
    ...
    
    @Effect()
    loadQueuesMerged$ = merge(this.loadQueues$, this.loadQueuesByDuration$).pipe(
        // logic to remove duplicates
        );
    
    推荐文章