Я пытаюсь загрузить древовидную структуру с помощью рекурсивных http-запросов. Мое дерево объектов - это общее дерево, где у родителя может быть переменное количество детей
|-Parent unit
|- Child unit 1
|- Child unit 2
|- Child unit 3
...
|- Child unit 4
|- Child unit 5
|- Child unit 6
|- Child unit 7
|- Child unit 8
...
...
Чтобы загрузить дерево, я использовал решение, предоставленное bryan60 здесь . Я изменил код для своих нужд
//unitsTree: {Id: number, Title: string, ParentId: number}[] = [];
ngOnInit(): void {
this.apiUrl = this.configService.configData["apiUrl"];
this.loadChildren(30000332) // initial parent code
.subscribe(data => console.log(data)); // here I'd like to get an object containing whole tree structure
}
loadChildren(unitId: number): Observable<Object> {
return this._http.getData(this.apiUrl + "units?$filter=ParentId eq " + unitId + "&$select=Id,Title,ParentId")
.pipe(
switchMap((data) => {
if (!data)
return of(null);
let children$: Observable<Object>[] = [];
// data is OData response, data["value"] contains children units
data["value"].forEach((item: {Id: number, Title: string, ParentId: number}) => {
//unitsTree.push(item);
children$.push(this.loadChildren(item.Id));
});
return (children$.length) ? forkJoin(children$) : of([]);
})
);
}
Он отлично работает, выполняет рекурсивные http-запросы, но я не знаю, как вернуть объект, содержащий целую древовидную структуру. При подписке я получаю структуру, но все ее элементы пусты.
Я пытался помещать sh элемент в массив unitsTree на каждой итерации foreach. но в этом случае UnitTree не содержит никакой древовидной структуры, а представляет собой простой список элементов.
Я совершенно новичок в Angular и TypeScript и, честно говоря, не совсем понимаю, как работает switchMap и как чтобы получить данные, которые мне нужны. Будем благодарны за любую помощь.