我需要编写一个@Effect(),它获取一个数组作为输入并将api调用分派给REST服务-每个元素都应产生一个调用。然后,我需要调度一个动作来处理响应。许多站点建议使用forkJoin,但似乎它等待所有请求完成,这不是我所需要的。
我已经尝试过了(没有效果,只是一个基本示例):
@Html.DropDownList("UserID", null, new { onchange = "location.href='@Url.Action("Action", "Controller")'" })
但是我不能完全确定请求实际上是在并行调度。
谢谢。
答案 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))
))
);