Javascript 角度NgRx效果基于条件concatMap多个HTTP请求
我有一个通过Javascript 角度NgRx效果基于条件concatMap多个HTTP请求,javascript,angular,rxjs,ngrx,ngrx-effects,Javascript,Angular,Rxjs,Ngrx,Ngrx Effects,我有一个通过concatMap方法映射到HTTP请求的操作,因为我需要对这些HTTP请求进行排序。我想通过只对具有相同对象ID的HTTP请求进行排序来改进这种行为,该对象ID在操作中发送 这是我的代码,正在工作,但所有的请求都是顺序的。我正在使用它对记录进行内联编辑,我希望这样,如果用户更改ID为1的记录的value1,然后更改ID为1的记录的value2,这些调用将是连续的,但是,如果他同时更改ID为2的记录的value1,则它将对ID为2的记录执行保存请求,同时对ID为1的记录执行保存请求。
concatMap
方法映射到HTTP请求的操作,因为我需要对这些HTTP请求进行排序。我想通过只对具有相同对象ID的HTTP请求进行排序来改进这种行为,该对象ID在操作中发送
这是我的代码,正在工作,但所有的请求都是顺序的。我正在使用它对记录进行内联编辑,我希望这样,如果用户更改ID为1的记录的value1
,然后更改ID为1的记录的value2
,这些调用将是连续的,但是,如果他同时更改ID为2的记录的value1
,则它将对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对您的操作进行分组。此操作符将在其特定组的可观察对象上发出每个传入操作
saveEffect=this.actions.pipe(
类型(saveAction),
groupBy(action=>action.oID),
合并映射(组$=>组$.pipe(
concatMap(action=>this.saveAction(action))
))
);
saveAction(action):可观察的{
返回此.service.save(action.oID,action.saveData).pipe(
地图(…),
捕获错误(…)
)
}
使用此代码片段可以轻松解决问题,非常感谢