服务中的Angular 5打字稿呼叫服务并合并数据

时间:2018-12-03 14:54:25

标签: angular typescript angular5

我正在尝试在服务中调用服务并合并数据。这两个服务是1)shipDateChangeService和2)appenderService。我将每个服务的数据分别存储在shipClasses和ApplicantClasses中。然后,我想合并数据并将其存储在结果数组中。我正在尝试确定执行此操作的最有效方法,并且由于我是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));

2 个答案:

答案 0 :(得分:1)

请尝试这种方式

当您的API调用不依赖时,您可以使用它。

forkJoin()

使用forkJoin可以一次调用多个API,并且会在数组中获得响应。

例如。

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

您可以找到更多Here

当您依赖其他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);
 });

这对我有用。

答案 1 :(得分:0)

如果两个服务调用互不依赖,则可以进行多个并行API调用,并使用forkjoin将所有结果组合为一个数组。如果两个呼叫是相关的,请使用switchMap