如何订阅一些 Observable 请求?
How to subscribe to some Observable requests?
我有一些 returns 可观察数据的 http 方法。所有方法都投入使用:
class Service {
requests1(): Observable<any> {
return http...;
}
requests2(): Observable<any> {
return http...;
}
requests3(): Observable<any> {
return http...;
}
}
我在应用程序的某个地方使用它:
Service.request1().subscribe((data) => {
console.log(data);
});
在嵌套组件中还调用另一个请求:
Service.request2().subscribe((data) => {
console.log(data);
});
如何从应用程序的不同部分使用 forkJoin 加入它们?
forkJoin(request1, request2) {}
问题是一个 request1
从 parent 组件调用,另一个 request2
在 child.
我需要 joinFork 来确保它们完成?
我想列出所有 Observables,例如:
export let request1Obs: Observable<any>;
export let request2Obs: Observable<any>;
export let request3Obs: Observable<any>;
然后在调用服务器的地方使用:
request1Obs = Service.requests1();
request2Obs = Service.requests2();
request3Obs = Service.requests3();
然后 child A component
使用这个:
ngOninit() {
request1Obs.subscribe(() => {});
}
在另一个 child B component
中使用这个:
ngOninit() {
request2Obs.subscribe(() => {});
}
并且在 parent 组件中:
ngOnInit() {
forkJoin(request1Obs, request2Obs).subscribe((data) => {
// All requestes were finished in application
});
}
forkJoin(Service.request1(), Service.request2())
.subscribe(([response1, response2]) => console.log(`response1: ${respone1}, response2: ${response2}`));
根据 forkjoin 的正确用法,您必须在单一来源中使用它。您必须从 parent 或 child 调用您的服务。然后forkjoin完成后就可以在中间共享数据了。
简而言之,在 Parent 组件中执行此操作:
response1:any
response2:any
forkJoin(Service.request1(), Service.request2())
.subscribe(Response =>
response1= Response[0];
response2= Response[1];
);
在此之后,您可以通过多种方式将数据(response2)发送到您的 child 组件。
你可以使用shareReplay,http请求将只执行一次然后forkJoin结果将被缓存用于整个应用程序中的任何新订阅,如果服务是单例(只需添加{provideIn: 'root'}
).
@Injectable({provideIn: 'root'})
class Service {
getRequestsData() {
return forkJoin([...allRequests]).pipe(shareReplay(1))
}
}
我有一些 returns 可观察数据的 http 方法。所有方法都投入使用:
class Service {
requests1(): Observable<any> {
return http...;
}
requests2(): Observable<any> {
return http...;
}
requests3(): Observable<any> {
return http...;
}
}
我在应用程序的某个地方使用它:
Service.request1().subscribe((data) => {
console.log(data);
});
在嵌套组件中还调用另一个请求:
Service.request2().subscribe((data) => {
console.log(data);
});
如何从应用程序的不同部分使用 forkJoin 加入它们?
forkJoin(request1, request2) {}
问题是一个 request1
从 parent 组件调用,另一个 request2
在 child.
我需要 joinFork 来确保它们完成?
我想列出所有 Observables,例如:
export let request1Obs: Observable<any>;
export let request2Obs: Observable<any>;
export let request3Obs: Observable<any>;
然后在调用服务器的地方使用:
request1Obs = Service.requests1();
request2Obs = Service.requests2();
request3Obs = Service.requests3();
然后 child A component
使用这个:
ngOninit() {
request1Obs.subscribe(() => {});
}
在另一个 child B component
中使用这个:
ngOninit() {
request2Obs.subscribe(() => {});
}
并且在 parent 组件中:
ngOnInit() {
forkJoin(request1Obs, request2Obs).subscribe((data) => {
// All requestes were finished in application
});
}
forkJoin(Service.request1(), Service.request2())
.subscribe(([response1, response2]) => console.log(`response1: ${respone1}, response2: ${response2}`));
根据 forkjoin 的正确用法,您必须在单一来源中使用它。您必须从 parent 或 child 调用您的服务。然后forkjoin完成后就可以在中间共享数据了。
简而言之,在 Parent 组件中执行此操作:
response1:any
response2:any
forkJoin(Service.request1(), Service.request2())
.subscribe(Response =>
response1= Response[0];
response2= Response[1];
);
在此之后,您可以通过多种方式将数据(response2)发送到您的 child 组件。
你可以使用shareReplay,http请求将只执行一次然后forkJoin结果将被缓存用于整个应用程序中的任何新订阅,如果服务是单例(只需添加{provideIn: 'root'}
).
@Injectable({provideIn: 'root'})
class Service {
getRequestsData() {
return forkJoin([...allRequests]).pipe(shareReplay(1))
}
}