У меня есть угловой преобразователь для предоставления данных для компонента.Я использую ngrx.Я хочу проверить, есть ли в магазине 2 куска данных (автомобиль и его производитель), если нет, отправьте действие для получения данных из 2 отдельных API.Сначала я получаю автомобиль, основываясь на параметре URL, когда у меня есть машина, мне нужно, чтобы производитель отправлял ID автомобиля в API.Когда оба запроса выполнены, и у меня есть и автомобиль, и его производитель, я хочу объединить данные (добавить производителя как свойство автомобиля) и вернуть объект car в распознаватель.
export class CardResolverService implements Resolve <Observable<any>> {
private cardId: string;
private cardLoaded$ = new Subject();
private makerLoaded$ = new Subject();
private car: Car;
constructor(private store: Store<any>) {
}
// Check if car is in store, otherwise dispatch action to call API
// Once the car is loaded, get its maker based on one of its properties
private initCar(): void {
this.store.select(CarSelectors.getCardById(this.cardId)).pipe(
takeUntil(this.cardLoaded$)
).subscribe((car) => {
if (!car) {
this.store.dispatch(new CarSelectors.LoadCarByIdAction(this.cardId));
} else {
this.cardLoaded$.next(true);
this.car = car;
this.getCarMaker(car.makerId);
}
});
}
private getCarMaker(makerId: string) {
this.store.select(MakerSelectors.getMakerById(makerId)).pipe(
takeUntil(this.makerLoaded$)
).subscribe((maker) => {
if (!maker) {
this.store.dispatch(new MakerActions.LoadMakerByIdAction(makerId));
} else {
this.car.maker = maker;
this.makerLoaded$.next(true);
}
});
}
// I need to wait until both car and maker are loaded to return the car object
private waitForData(): Observable<TeamMemberView> {
return this.carLoaded$.pipe(
withLatestFrom(this.makerLoaded$),
map(() => this.car)
);
}
resolve(route: ActivatedRouteSnapshot): Observable<any> {
// Get car ID from url
this.carId = route.params['carId'];
this.initCar();
return this.waitForData(); // Here is where I need help
}
}
В методе waitForData я пытаюсь проверить, возвращали ли обе наблюдаемые объекты автомобиль и создатель значения через субъекты и, если они есть, возвращали объект автомобиля.Но метод waitForData ничего не возвращает.