Angular 如何订阅一些可观察到的请求?
我有一些返回可观察数据的http方法。所有方法都已投入使用: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
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];
);