angular - 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));
解决方案
请尝试这种方式
当您的 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);
});
这对我有用。!
推荐阅读
- regex - 使用 sed 替换 SQL 的正则表达式
- mongodb - Mongodb - 聚合多个集合特定的结果格式
- linux - yum 软件包安装的 %pre scriptlet 失败错误
- python - 熊猫将公式应用于每一行并找到最小值
- ffmpeg - 直接在 Web Audio API AudioWorklet 中使用 FFMPEG 过滤器
- android - 如何在 Ionic 上设置 Cordova 模拟器?
- amazon-web-services - 通过 CodeDeploy 部署 AWS Lambda
- python - 理解 for 循环中的分叉
- python - 通过 REST API(使用 Python)使用 Adobe PDF 服务将 PDF 转换为 DOCX
- json - PowerShell - 读取 JSOn 文件,使用字符串插值