Ngrx效果并行http调用

信息开发

我的效果是应该调用两个不同的API(API1和API2)。

这是效果

$LoadKpiMission = createEffect(() =>
  this.actions$.pipe(
    ofType<any>(EKpiActions.GetMissionsByStation),
    mergeMap(action =>
      this.apiCallsService.getKpi(action.payload, '2016-04-18').pipe(
        map(trips => ({ type: EKpiActions.GetMissionsSuccess, payload: trips })),
        catchError(() => EMPTY)
      )
    )
  )
);

这是服务的结构

getKpi(station: number, date: string) {
  let Kpi = `http://192.168.208.25:8998/api/scheduling/circulation_by_date_and_station?orig=${station}&date=${date}`;
  return this.http.get<ISchedules>(API1).pipe(
    map(data => {
      return this.formatDataToKpi1(data);
    })
  );
}

但是,我必须从中检索其他数据API2并将其与从中返回的数据合并API1

我应该在formatDataToKpi1函数内部执行此操作

我想知道如何并行运行请求,并将返回的响应传递给它formatDataToKpi1,然后进行处理然后返回效果?

wentjun

您可以使用forkJoinRxJS运算符。

文档中所述

当所有可观测值完成时,从每个可观测值发出最后一个发出的值。

这样,当两个请求的可观察值都完成时,它将被返回,并且您可以执行后续操作。

$LoadKpiMission = createEffect(() =>
  this.actions$.pipe(
    ofType<any>(EKpiActions.GetMissionsByStation),
    mergeMap(action =>
      const getKpi = this.apiCallsService.getKpi(action.payload, '2016-04-18');
      const getKpi2 = this.apiCallsService.getKpi2();

      forkJoin(getKpi, getKpi2).subscribe(([res1, res2] => {
        // do the rest here
      });

    )
  )
);

编辑:看起来我起初误解了您的问题-变量名有点困惑

getKpi(station: number, date: string) {
  let Kpi = `http://192.168.208.25:8998/api/scheduling/circulation_by_date_and_station?orig=${station}&date=${date}`;

  const api1 = this.http.get<ISchedules>(API1);
  const api2 = this.http.get<ISchedules>(API2);

  return forkJoin(api1, api2).pipe(
    map(data => {
      return this.formatDataToKpi1(data);
    })
  );
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

角度ngrx存储将多http服务调用成一个效果并消除动作

来自分类Dev

从NgRx效果调用API时捕获错误

来自分类Dev

在 ngrx 效果中调用 api 后获取数据

来自分类Dev

RxJs / Ngrx 限制指定参数的 http 调用

来自分类Dev

ngrx效果-具有相同效果的两个http api

来自分类Dev

NgRx效果mergeMap方法

来自分类Dev

ngrx从效果更新状态

来自分类Dev

如何在 ngrx 效果中使用 ngrx 存储?我需要来自商店的数据来进行 api 调用

来自分类Dev

NGRX:如何多次调用同一服务,而内部效果不同

来自分类Dev

并行进行http调用时出现未经授权的响应

来自分类Dev

Node.js进行并行http调用并合并结果

来自分类Dev

如何从角度组件并行调用多个 http 服务

来自分类Dev

ngrx:商店INIT操作的效果

来自分类Dev

NGRX 效果/Firebase (Firestore) 错误

来自分类Dev

store.select 的 ngrx 效果

来自分类Dev

使用延迟测试 NGRX 效果

来自分类Dev

多次并行调用AsyncTask

来自分类Dev

需要帮助来了解此Ngrx效果

来自分类Dev

ngrx /动作/效果后UI通知存储

来自分类Dev

NgRx-选择效果中的AppState

来自分类Dev

正确处理ngrx效果catchError

来自分类Dev

NgRx效果仅执行一次

来自分类Dev

在NGRX中以什么顺序执行效果

来自分类Dev

需要帮助来了解这种Ngrx效果

来自分类Dev

如何在 ngrx 中测试效果?

来自分类Dev

Angular with ngrx 和 typescript 问题与效果

来自分类Dev

我的 ngrx 效果不会触发动作

来自分类Dev

使用@ngrx 在mergeMap 中进行并行操作?

来自分类Dev

NgRx http.post请求在Effect再次调用后未执行