Мне нужна помощь в отношении Observables с Angular.
export class Car implements OnInit {
exterior: Exterior;
engine: Engine;
ngOnInit(): void {
this.getContent();
}
getContent() {
this.exterior.getContent();
this.engine.getContent();
}
}
export class Exterior {
color: string;
doors: number;
getContent() {
this.http.get('url').map((response) => {
this.color = response.color;
this.doors = response.doors;
});
}
}
export class Engine {
horsePower: number;
model: string;
getContent() {
this.http.get('url').map((response) => {
this.horsePower = response.horsePower;
this.doors = response.doors;
});
}
}
const car = new Car();
console.info(car);
Итак, у меня есть эти 3 объекта, и я хочу, чтобы когда я вызываю new Car (), он заполняет параметры. Затем я хочу создать log для этого автомобильного объекта после выполнения всех HTTP-запросов, что означает, что оба getContents из Exterior и Engine были завершены, что будет означать, что getContents из Car был завершен, и, наконец, ngOnInit. Я не хочу связывать эти HTTP-запросы, то есть вызывать только второй HTTP-запрос после завершения первого. Оба должны погаснуть одновременно.
Есть идеи, как это реализовать?





Используя RxJs, вы должны попробовать что-то вроде этого:
export class Car implements OnInit {
exterior: Exterior;
engine: Engine;
ngOnInit(): void {
this.getContent();
}
getContent(): Observable<any> {
return forkJoin(this.exterior.getContent(), this.engine.getContent());
}
}
Внутри другого компонента:
...
this.car.getContent().subscribe(
results => {
let exterior = result[0];
let engine = result[1];
// Do whatever you want here
});
)
...
Это также подразумевает, что оба ваших метода exterior.getContent() и engine.getContent() должны возвращать Observable данных, которые вы хотите использовать.
хорошо, но я хочу слушать от другого компонента, это означает, что getContent of Car должен возвращать наблюдаемый. ngOnInit возвращает void, поэтому мне нужно вызвать getContent из другого компонента, но как заставить getContent возвращать наблюдаемое?
Я обновил свой первый пост, просто верните результат forkJoin и подпишитесь на него, когда и где захотите :)