javascript - Angular NgRx Effect concatMap 基于条件的多个 HTTP 请求
问题描述
我有一个通过concatMap
方法映射到 HTTP 请求的操作,因为我需要对这些 HTTP 请求进行排序。我想通过仅对在操作中发送的具有相同对象 ID 的 HTTP 请求进行排序来改进此行为。
这是我正在工作的代码,但是使所有请求按顺序排列。我将它用于记录的内联编辑,并且我希望如果用户更改value1
ID:1 的记录然后更改value2
ID:1 这些调用将是顺序的,但如果他更改value1
ID:2 的记录同时,它会同时执行 ID:2 记录的保存请求和 ID:1 记录的保存请求。这可以用一些地图方法吗?
@Effect()
saveEffect = this.actions.pipe(
ofType(saveAction),
concatMap(action => this.service.save(action.oID, action.saveData)
.pipe(
map(...),
catchError(...)
)
)
);
解决方案
您可以使用groupBy
id 对您的操作进行分组。该操作符将在 Observable 上为其特定组发出每个传入的操作。
saveEffect = this.actions.pipe(
ofType(saveAction),
groupBy(action => action.oID),
mergeMap(group$ => group$.pipe(
concatMap(action => this.saveAction(action))
))
);
saveAction(action): Observable<any> {
return this.service.save(action.oID, action.saveData).pipe(
map(...),
catchError(...)
)
}
推荐阅读
- vue.js - TinyMCE 仅加载到 vue js 应用程序一次
- python - 返回句子中某个字符串的索引号
- angular - 我如何运行 file.JAR 使用控制器 RESTFUL ( Spring Framework ) 传递动态参数
- android - Android Studio:无法在可绘制文件夹中使用资源文件
- git - 迁移到 LFS 后存储库仍然很大
- excel - Excel 2016。如何从工作表中显示 Userform1 的特定值?
- c# - 如何在 MongoDB C# 聚合管道中使用 Addfields
- python - Python,部分程序独立运行
- android - 当 DAO 方法需要更改参数时,如何使用 LiveData?
- firebase - ServiceWorker:离线插件和 Firebase