Angular 如何订阅一些可观察到的请求?

Angular 如何订阅一些可观察到的请求?,angular,rxjs,angular6,angular8,Angular,Rxjs,Angular6,Angular8,我有一些返回可观察数据的http方法。所有方法都已投入使用: class Service { requests1(): Observable<any> { return http...; } requests2(): Observable<any> { return http...; } requests3(): Observable<any> { return ht

我有一些返回可观察数据的http方法。所有方法都已投入使用:

class Service {

    requests1(): Observable<any> {
        return http...;
    }

    requests2(): Observable<any> {
        return http...;
    }

    requests3(): Observable<any> {
        return http...;
    }
}
在嵌套组件中,还调用另一个请求:

Service.request2().subscribe((data) => {
   console.log(data);
});
如何使用来自应用程序不同部分的forkJoin连接它们

forkJoin(request1, request2) {}
问题是一个
request1
正在从父组件调用,另一个
request2
在子组件内部调用

我需要joinFork来确保他们完成了

我想列出所有观察到的东西,比如:

export let request1Obs: Observable<any>;
export let request2Obs: Observable<any>;
export let request3Obs: Observable<any>;
然后使用子组件
来使用它:

ngOninit() {
    request1Obs.subscribe(() => {});    
}
ngOninit() {
    request2Obs.subscribe(() => {});    
}
在另一个子组件
B中使用:

ngOninit() {
    request1Obs.subscribe(() => {});    
}
ngOninit() {
    request2Obs.subscribe(() => {});    
}
在父组件中:

ngOnInit() {
   forkJoin(request1Obs, request2Obs).subscribe((data) => {
   // All requestes were finished in application
});
}

根据forkjoin的正确用法,您必须在单个源中使用它。您必须从家长或孩子处呼叫您的服务。然后,在完成forkjoin之后,您可以在它们之间共享数据

简而言之,在父组件中,请执行以下操作:

response1:any
response2:any
forkJoin(Service.request1(), Service.request2())
    .subscribe(Response =>
response1= Response[0];
response2= Response[1];
 );
在此之后,您可以通过多种方式将数据(response2)发送到子组件。

您可以使用,http请求将只执行一次,然后,如果服务是单例服务,forkJoin结果将缓存在整个应用程序中的任何新订阅中(只需添加
{provideIn:'root'}

@Injectable({provideIn:'root'})
班级服务{
getRequestsData(){
返回forkJoin([…allRequests]).pipe(shareReplay(1))
}
}

是的,但它应该是可观察的列表吗?你能看到我的更新吗?我没有收到这个消息。你可以调用来自父组件的所有请求,并将该数据存储在父组件中,然后使用事件发射器或输出将该数据进一步发送到组件A和组件B。我需要等待,直到所有请求都完成,但是forkJoin推送了每个请求的最后一个值。forkJoin的官方文档也这么说。它返回传递给它的每个可观察对象的最后一个值。请查找文档链接:问题是有些请求在子组件中发送,有些在其他地方发送。如果他们都完成了,如何倾听?如果我使用forJopin(),它也会调用相同的方法
response1:any
response2:any
forkJoin(Service.request1(), Service.request2())
    .subscribe(Response =>
response1= Response[0];
response2= Response[1];
 );