我目前正在使用NGRX开发Angular应用程序的功能,在该功能中,调度了一个操作以使用Id获取某些数据;然后使用第一个服务调用中的响应对象,发出第二个请求,以从其他端点提取更多详细信息。一切完成后,数据/动作可以继续进行。
问题:我正在寻找一种在单一效果中执行上述动作的方法,而没有链接效果/动作,因为那样会导致渲染的组件不完整。
我看过一些使用forkJoin的示例,但不确定是否适用,因为它们不是并行调用而是已排序。
代码是这样的:
this.actions$.pipe(
ofType(fetchAllData),
switchMap(action => {
const one = this.api.getById(serviceUrl, action.Id);
return one.pipe(
switchMap((data) => {
cons two = this.api.getMoreDetail(serviceUrl, two.id)
return fetchDataActions(data, []);
})
);
})
)
);
因此理想情况下,数据将包含我需要的一切,并准备填充我的组件。
注意:-上面的代码不起作用-必须按顺序进行通话,因为通话1的响应将用作通话2的参数-进行顺序调度的动作将不起作用,因为呈现时组件数据不完整。
[C0之后,您可以添加第二个映射运算符以发出第二个请求。
我正在寻找一种在单一效果中执行上述动作的方法,而没有链接效果/动作,因为那样会导致渲染的组件不完整
这是不正确的,如果一个效果没有分派由reducer处理并导致状态改变的动作,则该组件将不会重新渲染。如果状态会改变,它只会重新显示。
请参见下面的文章,其中解释了一些效果模式:switchMap