【发布时间】:2020-05-24 17:40:15
【问题描述】:
我必须在我的 Angular 应用程序中进行两个并行 API 调用,每个调用的数据都将在组件中使用。下面是我的服务和组件文件的代码。我使用forkJoin 进行并行调用和处理。因为根据我的理解forkJoin 确保在两个 API 调用都成功时会调用成功回调。
在运行时,我可以看到成功回调在每个服务中被调用,但在组件文件中没有。
api.services.ts
$getRequestById(id: string): Subject<any> {
const data_subject = new Subject<any>();
this.$http.get(API_URL + '/' + id).subscribe(
(dto) => data_subject.next(new Request(dto)), // THIS IS GETTING EXECUTED
(error) => data_subject.error(error)
);
return data_subject;
}
$getAllRequestsForId(id: string): Subject<any> {
const data_subject = new Subject<any>();
this.$http.get(API_URL + '?request_id=' + id).subscribe(
(dto) => data_subject.next(dto.map(i => new Request(i))),
(error) => data_subject.error(error)
);
return data_subject;
}
在我的组件文件中,
home.component.ts
const request = this.service.$getRequestById(this.id);
const allRequests = this.service.$getAllRequestsForId(this.id);
forkJoin([request, allRequests])
.subscribe(
(response) => this.setResponse(response), // THIS LINE IS NOT GETTING CALLED.
(error) => this.notification.error('Error occured while fetching request details! Please try again.')
);
但是,如果我在任何组件中独立运行此 API 调用,如下所示,它可以正常工作。
this.service.$getRequestById(this.id).subscribe(
(response) => this.setResponse(response), // THIS GETS EXECUTED
(error) => this.notification.error("An error occured")
)
我在应用程序的其他部分独立使用这些服务没有任何问题,但是当与forkJoin 结合时,没有调用成功回调。知道如何解决这个在forkJoin 和独立调用中都有效的问题吗?
【问题讨论】:
-
可能是因为提供给
forkJoin的可观察对象不完整。
标签: angular rxjs observable angular-httpclient angular2-observables