【问题标题】:Angular NgRx Effect concatMap multiple HTTP requests based on conditionAngular NgRx Effect concatMap 基于条件的多个 HTTP 请求
【发布时间】:2025-12-12 10:05:04
【问题描述】:

我有一个通过 concatMap 方法映射到 HTTP 请求的操作,因为我需要对这些 HTTP 请求进行排序。我想通过仅对在操作中发送的具有相同对象 ID 的 HTTP 请求进行排序来改进此行为。

这是我工作的代码,但使所有请求按顺序排列。我将它用于记录的内联编辑,我想让它,如果用户更改 value1 以记录 ID:1,然后更改 value2 以 ID:1 这些调用将是连续的,但如果他更改 @987654324 @ 对于 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(...)
    )
  )
);

【问题讨论】:

    标签: javascript angular rxjs ngrx ngrx-effects


    【解决方案1】:

    您可以使用 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(...)
      )
    }
    

    【讨论】:

    • 用这个sn-p简单轻松的解决,非常感谢
    最近更新 更多