【问题标题】:How to merge data from 2 ngrx effects如何合并来自 2 个 ngrx 效果的数据
【发布时间】:2018-06-15 20:41:17
【问题描述】:

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

    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

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

【问题讨论】:

  • 做reducer中重复的合并和删除。

标签: angular merge rxjs ngrx ngrx-effects


【解决方案1】:

loadQueuesByDuration$loadQueuesByDuration$ 中删除@Effect() 装饰器。

然后使用@Effect() 装饰器创建第三个变量:

import { merge } from 'rxjs';

...

@Effect()
loadQueuesMerged$ = merge(this.loadQueues$, this.loadQueuesByDuration$).pipe(
    // logic to remove duplicates
    );

【讨论】:

    猜你喜欢
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多