NGRX 效果序列依赖 api 调用

NGRX Effect sequence dependent api calls

我目前正在为一个使用 NGRX 的 Angular 应用程序开发一项功能,其中调度一个操作以使用 Id 获取一些数据;然后使用来自第一个服务调用的响应对象,发出第二个请求以从不同的端点中提取更多详细信息。全部完成后data/actions可以继续流

问题:我正在寻找一种方法来在单个效果中执行上述操作,而无需链接 effects/actions 因为这会导致呈现的组件不完整。

我看过一些使用 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 的参数 - 由于组件数据在呈现时不完整,因此无法执行按顺序分派的操作。

switchMap之后,您可以添加第二个映射操作符来进行第二个请求。

I'm looking for a way to perform the actions described above in a single effect, without chaining effects/actions as that would cause the component rendered to be incomplete

这是不正确的,如果 effect 不分派由 reducer 处理并导致状态更改的操作,则不会重新呈现组件。它只会在状态发生变化时重新呈现。

请参阅以下文章,其中解释了一些效果模式:https://blog.nrwl.io/ngrx-patterns-and-techniques-f46126e2b1e5