angular - 不同 NGRX 效果导致相同动作但在某些情况下连续触发时的最佳实践
问题描述
情况: 假设我们必须从不同的端点获取 3 组数据,所有这些都导致存储中一组答案的扩展。每次我们获得这三个来源之一的新添加时,我们都希望将现在扩展的答案对象保存到商店。
效果非常简化,如下所示:
- ofType(newRedAnswers) => 地图(saveAnswersToLocal)
- ofType(newBlueAnswers) => 地图(saveAnswersToLocal)
- ofType(newGreenAnswers) => 地图(saveAnswersToLocal)
大多数时候,当我们需要更新该特定组时,我们彼此独立地获取源。
问题:在启动时,我们总是在最初连续获得所有三个。但我不想有 3 次保存它们。我想知道最优雅的方法是什么?写新效果?条件?分开不同的动作,例如“在启动时加载红色答案”和“在运行时加载红色答案”?
您甚至会恐吓您的后端人员,直到他为您创建一条仅用于启动目的的所有 3 个统一路线?
感谢您的任何建议,伙计们!
解决方案
我会做这样的事情:
@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 */),
)
}),
);
至于最佳实践,我不确定。
推荐阅读
- c# - 为什么我的光线投射会击中错误的对象?
- spring - 使用 JPA 查询时未显示响应正文
- java - 添加原生图片时,JCodec 序列编码器抛出 ClosedByInterruptException
- typescript - 如何为泛型参数赋予默认值?
- javascript - 无法使用通过 jQuery 在 JSON 中配置的 URL 来呈现图像
- flutter - 如何有条件地显示一些小部件
- docker - Kubernetes 上的 Jenkins - 从 kubectl 获取容器日志
- javascript - 从第二个数组中过滤匹配值的对象数组
- appium - 如何在 UIAutomator 中获取具有特定模式的所有文本
- javascript - 如何使用节点发布 AutoML(Firebase) 模型?