Javascript 递归http api调用后的消息订阅服务器

Javascript 递归http api调用后的消息订阅服务器,javascript,angular,recursion,Javascript,Angular,Recursion,我想获取一个节点列表,以创建所述节点对象的数组,以便显示层次结构。基于的数据/结构如下所示: ROOT (ID=1) |--NODE (ID=2) | └--NODE (ID=4) | └--NODE (ID=11) └--NODE (ID=3) |--NODE (ID=5) |--NODE (ID=6) |--NODE (ID=7) └--NODE (ID=8) |--NODE (ID=9) └--NODE (ID=10) 您有一

我想获取一个节点列表,以创建所述节点对象的数组,以便显示层次结构。基于的数据/结构如下所示:

ROOT (ID=1)
|--NODE (ID=2)
|  └--NODE (ID=4)
|     └--NODE (ID=11)
└--NODE (ID=3)
   |--NODE (ID=5)
   |--NODE (ID=6)
   |--NODE (ID=7)
   └--NODE (ID=8)
      |--NODE (ID=9)
      └--NODE (ID=10)  
您有一个根节点,其子节点也包含child。包括根节点在内,树中有3个阶段。我创建了一个REST-API,它返回给定节点内的子节点。我还尝试在REST结构中对该层次结构进行建模,因此调用如下所示:

TYPE        PATH                      RESULT CHILD IDs
GET         /1/nodes                  2, 3
GET         /1/nodes/2/nodes          4
GET         /1/nodes/3/nodes          5, 6, 7, 8
GET         /1/nodes/3/nodes/8/nodes  9, 10 
    this.subject.next(this.getNodes('/1/nodes'); /*root-uri*/

    getNodes(uri) {
      const nodeList: Node[] = [];
      http.get(path).subscribe(data => {
        for(const obj of data.json()) {
            let node = new Node();
            //map data to Node e.g node.is = data.id

            //get the children with the nested call
            node.children = getNodes(uri + '/' + node.id + '/nodes'); 
            nodeList.push(node);
        }
    }
    return nodeList;
}  
为了构建树,我尝试使用递归模式,如下所示:

TYPE        PATH                      RESULT CHILD IDs
GET         /1/nodes                  2, 3
GET         /1/nodes/2/nodes          4
GET         /1/nodes/3/nodes          5, 6, 7, 8
GET         /1/nodes/3/nodes/8/nodes  9, 10 
    this.subject.next(this.getNodes('/1/nodes'); /*root-uri*/

    getNodes(uri) {
      const nodeList: Node[] = [];
      http.get(path).subscribe(data => {
        for(const obj of data.json()) {
            let node = new Node();
            //map data to Node e.g node.is = data.id

            //get the children with the nested call
            node.children = getNodes(uri + '/' + node.id + '/nodes'); 
            nodeList.push(node);
        }
    }
    return nodeList;
}  
所以我的问题是:
如何从递归http调用创建节点对象数组,并向订阅者发送消息,以便订阅者只接收正确结构的完整节点数组


编辑

这就是节点模型的外观

export class Node {
  uuid: string;
  label: string;
  parentID: string;
  version: number;
  addableFlag: boolean;
  sectionFlag: boolean;
  children: Node[];
}

您需要在
subscribe()
范围中设置
this.subject
值。这样,在设置值之前,它就有了一个完整的、结构正确的列表

this.getChildren('/1/nodes')/*根uri*/
getNodes(uri){
常量节点列表:节点[]=[];
http.get(path).subscribe(数据=>{
for(data.json()的const obj){
让节点=新节点();
//将数据映射到节点,例如Node.is=data.id
//使用嵌套调用获取子对象
node.children=getNodes(uri+'/'+node.id+'/nodes');
nodeList.push(节点);
}
this.subject.next(nodeList);/*根uri*/
}
//Return将在数据到达之前执行此行时发送空数据
//返回节点列表;

}
您正在以同步方式返回nodeList,这将不起作用。@Salketer您能给我一个示例,说明如何以正确的方式返回吗?如何将子节点添加到子数组中?行
node.children=getNodes(uri)
de无法工作,因为node.children正在接受节点数组,但该方法不返回任何内容。