Получить общий результат рекурсивных http-запросов в Angular 9 - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь загрузить древовидную структуру с помощью рекурсивных 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-запросы, но я не знаю, как вернуть объект, содержащий целую древовидную структуру. При подписке я получаю структуру, но все ее элементы пусты.

enter image description here

Я пытался помещать sh элемент в массив unitsTree на каждой итерации foreach. но в этом случае UnitTree не содержит никакой древовидной структуры, а представляет собой простой список элементов.

Я совершенно новичок в Angular и TypeScript и, честно говоря, не совсем понимаю, как работает switchMap и как чтобы получить данные, которые мне нужны. Будем благодарны за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...