首页 > 解决方案 > 不同 NGRX 效果导致相同动作但在某些情况下连续触发时的最佳实践

问题描述

情况: 假设我们必须从不同的端点获取 3 组数据,所有这些都导致存储中一组答案的扩展。每次我们获得这三个来源之一的新添加时,我们都希望将现在扩展的答案对象保存到商店。

效果非常简化,如下所示:

大多数时候,当我们需要更新该特定组时,我们彼此独立地获取源。

问题:在启动时,我们总是在最初连续获得所有三个。但我不想有 3 次保存它们。我想知道最优雅的方法是什么?写新效果?条件?分开不同的动作,例如“在启动时加载红色答案”和“在运行时加载红色答案”?

您甚至会恐吓您的后端人员,直到他为您创建一条仅用于启动目的的所有 3 个统一路线?

感谢您的任何建议,伙计们!

标签: angularngrx

解决方案


我会做这样的事情:

@Effect({dispatch: false})
effect$: Observable<Action> = this.actions$.pipe(
  ofType(newRedAnswers, newBlueAnswers, newGreenAnswers),
  // I would research out of mergeMap, switchMap, or concatMap, which one to use
  // switchMap will cancel the previous request that hasn't loaded if a new request comes in
  switchMap(action => {
    const endObservable$;
    switch (action.type) {
      case 'Red':
        // assign http of red's endpoint to endObservable$
      case 'Blue':
        // assign http of blue's endpoint to endObservable$
      case 'Green':
       // assign http of green's endpoint to endObservable$
    }
    return endObservable.pipe(
      map(data => saveAnswersToLocal(data)),
      catchError(err => /*handle error */),
    )
  }),
);

至于最佳实践,我不确定。


推荐阅读