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));
}