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(...)
  )
}