我想重构一组使用forkJoin工作的服务调用。我有一些来自ngrx商店的商品<>,我需要为每件商品进行一次http调用)。需要帮助将rxjs forkjoin调用转换为异步调用(在ngrx @Effect中)
问题w/forkjoin是它本质上是一个阻塞操作,所以我需要等待所有的调用完成之前它返回 - 它可能是一个长长的列表。
我希望调用是异步的 - 这样循环每个项目,调用服务,并返回结果,以便UI更新项目。 (为了使事情变得复杂了一点,这是一个包裹NGRX @Effect内)
这是我工作的代码:
@Effect()
loadItemValues$: Observable<Action> = this.actions$
.ofType(setActions.LOAD_ITEMS_DATA)
.map(toPayload)
.switchMap(key => {
return this.store.select(fromRoot.getItems)
.flatMap(items => {
let observables = new Array();
for (let i of items) {
observables.push(this.myService.getItemInfo(i, key));
}
return Observable.forkJoin(observables)
.map((res: Grades[]) => {
return new setActions.LoadValuesSuccessAction(res);
})
})
})
我假设我需要创建一个新的观察到的,再次使用flatmap,但弄清楚如何将链传递回去,以确保每个项目都调用服务,然后调用LoadValuesSuccessAction Reducer和结果。
任何帮助,将不胜感激。
所以你想要一个接一个地发出的值,每个都在'LoadValuesSuccessAction'中 - 每个动作都包含一个数组,其中包含一个值? – cartant
@cartant是正确的。成功动作设置状态(通过减速器) – user58210