Próbuję załadować dane stron na najwyższym poziomie komponentem w kątowym 9 przy użyciu obserwowalności (RXJS 6.5.1). Kiedy subskrybuję każdą z tych usług indywidualnie, widzę dane wracające tylko w porządku:

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

Kiedy próbuję użyć widłoina, dane z metody subskrypcji nigdy nie jest zwrócone:

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

Próbowałem przekazywać widłę w tablicy połączeń serwisowych i próbowałem używać za pomocą ZIP, bezskutecznie. Co tu się dzieje?

2
EJ Morgan 5 wrzesień 2020, 18:53

1 odpowiedź

Najlepsza odpowiedź

Polecam użycie combineLatest z rxjs. Łatwiej jest użyć

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));
}
1
Owen Kelvin 5 wrzesień 2020, 16:18