Angular NgRx Effect 根据条件concatMap多个HTTP请求
Angular NgRx Effect concatMap multiple HTTP requests based on condition
我有一个通过 concatMap
方法映射到 HTTP 请求的操作,因为我需要对这些 HTTP 请求进行排序。我想通过仅对操作中发送的具有相同对象 ID 的 HTTP 请求进行排序来改进此行为。
这是我的代码,可以正常工作,但会按顺序发出所有请求。我正在使用它进行记录的内联编辑,我想让它如果用户更改 value1
以使用 ID:1 进行记录,然后将 value2
更改为 ID:1 这些调用将是顺序的,但如果他同时更改 value1
以记录 ID:2 那么它会同时执行 ID:2 的记录保存请求和 [=20= 的记录保存请求].这可以用一些地图方法吗?
@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(...)
)
}
我有一个通过 concatMap
方法映射到 HTTP 请求的操作,因为我需要对这些 HTTP 请求进行排序。我想通过仅对操作中发送的具有相同对象 ID 的 HTTP 请求进行排序来改进此行为。
这是我的代码,可以正常工作,但会按顺序发出所有请求。我正在使用它进行记录的内联编辑,我想让它如果用户更改 value1
以使用 ID:1 进行记录,然后将 value2
更改为 ID:1 这些调用将是顺序的,但如果他同时更改 value1
以记录 ID:2 那么它会同时执行 ID:2 的记录保存请求和 [=20= 的记录保存请求].这可以用一些地图方法吗?
@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(...)
)
}