NGRX-多个并行HTTP请求

时间:2018-06-22 10:09:25

标签: angular http ngrx

我需要编写一个@Effect(),它获取一个数组作为输入并将api调用分派给REST服务-每个元素都应产生一个调用。然后,我需要调度一个动作来处理响应。许多站点建议使用forkJoin,但似乎它等待所有请求完成,这不是我所需要的。

我已经尝试过了(没有效果,只是一个基本示例):

 @Html.DropDownList("UserID", null, new { onchange = "location.href='@Url.Action("Action", "Controller")'" })

但是我不能完全确定请求实际上是在并行调度。

谢谢。

1 个答案:

答案 0 :(得分:1)

使用 forkJoin 会触发并行XHR,但是只有在最后一次调用完成后您才能得到响应。另外,您必须知道,当一个呼叫失败时,即使10个XHR中有9个成功完成,您的完整流也将失败并且也不会得到任何响应。

我建议以下几点: 在效果内部,您将分派多个操作(对于每个其余的调用一个)。 然后,您对每个rest调用都有一个额外的效果,因此您可以异步处理它。

@Effect({ dispatch: false })
fetchData = this.actions
  .ofType(FETCH_DATA)
  .pipe(
    map((action: FetchDataAction) => action.payload ),
    map(payload => {
      // repeat as often you need to
      this.store.dispatch(new FetchDataXYAction(payload));
    })
 );


 @Effect()
 fetchDataXY = this.actions
   .ofType(FETCH_DATA_XY)
   .pipe(
     map((action: FetchDataXYAction) => action.payload),
     switchMap(payload => this.service.loadXY(payload).pipe(
       map(res => new FetchDataxySuccessAction(res))
     ))
   );