Angular 9: forkJoin subscribe не работает
Sep 06 2020
Я пытаюсь загрузить данные страницы в компонент верхнего уровня в Angular 9, используя наблюдаемые (rxjs 6.5.1). Когда я подписываюсь на каждую из этих служб по отдельности, я вижу, что данные возвращаются нормально:
ngOnInit(): void {
const technicianSubscription = this.techniciansClientService.getByTechnicianId(this.technicianId).subscribe(technician => console.log(technician));
const technicianReviewsSubscription = this.technicianReviewsClientService.getByTechnicianId(this.technicianId).subscribe(technicianReviews => console.log(technicianReviews));
}
Когда я пытаюсь использовать forkJoin, данные из метода подписки никогда не возвращаются:
ngOnInit(): void {
this.pageDataSubscription = forkJoin({
technician: this.techniciansClientService.getByTechnicianId(this.technicianId),
technicianReviews: this.technicianReviewsClientService.getByTechnicianId(this.technicianId),
}).subscribe(
// data is never logged here
data => console.log(data)
);
}
Я пробовал передавать forkJoin массив вызовов службы, и я также пробовал использовать zip, но безрезультатно. Что тут происходит?
Ответы
1 OwenKelvin Sep 05 2020 at 23:18
Я бы рекомендовал использовать combineLatestот rxjs. Его проще использовать
import {combineLatest} from `rxjs`;
componentIsActive = true;
ngOnInit(): void {
combineLatest([
this.techniciansClientService.getByTechnicianId(this.technicianId),
this.technicianReviewsClientService.getByTechnicianId(this.technicianId),
]).pipe(
map(([technician, technicianReviews]) => ({technician, technicianReviews})),
takeWhile(() => this.componentIsActive)
).subscribe(data => console.log(data));
}