首页 > 解决方案 > Angular 5 typescript 在服务中调用服务并合并数据

问题描述

我正在尝试在服务中调用服务并组合数据。这两个服务是 1)shipDateChangeService 和 2)申请人服务。我将来自每个服务的数据分别存储在 shipClasses 和 applicationClasses 中。然后我想组合数据并将其存储在结果数组中。我正在尝试确定执行此操作的最有效方法,并且由于我是 Angular 和 typescript 的新手,它一直进展顺利。以下是我目前拥有的,但我遇到了范围界定问题,我不想创建太多循环。

更新 我忘了提到第一次调用的数据将用于请求第二次调用的数据。

代码:

    this.result = [];
    this.shipClasses = [];
    this.applicantClasses = [];

    this.shipDateChangeService
            .getShipDateChangeClasses(query)
            .finally(() => {
                this.blockResults = false;
                this.shipClasses.forEach(function(value, key) {
                    this.push({'indSsn' : value.indSsn, 'ofcSymbId' : value.ofcSymbId, 'recstaLocCd' : value.recstaLocCd, 'rctgStnId' : value.rctgStnId, 'tngShipDt' : value.tngShipDt, 'name' : '' });
                    this.applicantService.getApplicant(value.indSsn)
                    .finally(() => {
                        console.log('within 2nd finally');
                    })
                    .subscribe(applicantList => (this.applicantClasses = applicantList));

                }, this.results);
            })
            .subscribe(classList => (this.shipClasses = classList));

标签: angulartypescriptangular5

解决方案


请尝试这种方式

当您的 API 调用不依赖于另一个 API 参数时,您可以使用它。

forkJoin()

通过使用,forkJoin您可以一次调用多个 API,您将获得数组中的响应。

前任。

forkJoin(API_1 , API_2)
.subscribe(([res1, res2]) => {

你可以在这里找到更多

当您有依赖于另一个 API 的资源时,请按照此操作。

POST('url', data).pipe(
   concatMap(result1 => secondPOSTCallToAPI('url', result1))
   concatMap( result2 => thirdPOSTCallToAPI('url', result2))
   concatMap(result3 => fourthPOSTCallToAPI('url', result3))
  ....
 ).subscribe((data) => {
    console.log(data);
 });

这对我有用。!


推荐阅读