Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度NgRx效果基于条件concatMap多个HTTP请求_Javascript_Angular_Rxjs_Ngrx_Ngrx Effects - Fatal编程技术网

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(
地图(…),
捕获错误(…)
)
}

使用此代码片段可以轻松解决问题,非常感谢