如何合并来自 2 个 ngrx 效果的数据
How to merge data from 2 ngrx effects
我有 2 个效果,它们在不同的用户操作时被调用。它们具有相同的 return 类型。我想将 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个效果数据的合并呢?
从 loadQueuesByDuration$
和 loadQueuesByDuration$
中移除 @Effect()
装饰器。
然后用 @Effect()
装饰器创建第三个变量:
import { merge } from 'rxjs';
...
@Effect()
loadQueuesMerged$ = merge(this.loadQueues$, this.loadQueuesByDuration$).pipe(
// logic to remove duplicates
);
我有 2 个效果,它们在不同的用户操作时被调用。它们具有相同的 return 类型。我想将 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个效果数据的合并呢?
从 loadQueuesByDuration$
和 loadQueuesByDuration$
中移除 @Effect()
装饰器。
然后用 @Effect()
装饰器创建第三个变量:
import { merge } from 'rxjs';
...
@Effect()
loadQueuesMerged$ = merge(this.loadQueues$, this.loadQueuesByDuration$).pipe(
// logic to remove duplicates
);