Javascript 无法在Angular2中进行http服务调用?

Javascript 无法在Angular2中进行http服务调用?,javascript,json,angular,typescript,http,Javascript,Json,Angular,Typescript,Http,嗨,我在Angular 5开发web应用程序。我正在生成树状结构。我跟在后面。我正在进行API调用以动态获取数据并显示为树。我的方法适用于静态数据,但不适用于在进行http调用后获取动态数据 public string ChildTranslator(){ return this.nodeservice.GetChildNodes(); } 下面的代码使用静态数据 asyncChildren = [ { name: 'child1', hasChild

嗨,我在Angular 5开发web应用程序。我正在生成树状结构。我跟在后面。我正在进行API调用以动态获取数据并显示为树。我的方法适用于静态数据,但不适用于在进行http调用后获取动态数据

 public string ChildTranslator(){
    return this.nodeservice.GetChildNodes();
}
下面的代码使用静态数据

asyncChildren = [
    {
      name: 'child1',
      hasChildren: true
    }, {
      name: 'child2'
    }
  ];

 getChildren(node: any) {
    const newNodes = this.asyncChildren.map((c) => Object.assign({}, c));

    return new Promise((resolve, reject) => {
      setTimeout(() => resolve(newNodes), 1000);
    });
  }
 public string ChildTranslator(){
    return this.nodeservice.GetChildNodes();
}
在上面的代码中,当我调用服务而不是this.asyncChildren时,我的代码将无法工作。下面是我的实现

getChildren(node: any) {
    const newNodes =  this.ChildTranslator().map((c) => Object.assign({}, c));
    return new Promise((resolve, reject) => {
      setTimeout(() => resolve(newNodes), 1000);
    });
  }
 public string ChildTranslator(){
    return this.nodeservice.GetChildNodes();
}
只要有子节点,就会调用上述方法。因此,我不是调用this.asyncChildren,而是调用this.ChildTranslator方法,该方法进行http服务调用,获取JSON并将数据转换为所需格式。下面是ChildTranslator方法的实现

 public string ChildTranslator(){
    this.nodeservice.GetChildNodes().subscribe(data=>{
    this.asyncChildren= this.transformer(data);
    return this.asyncChildren;
    });
}
 public string ChildTranslator(){
    return this.nodeservice.GetChildNodes();
}
变压器代码

  public string transformer(data:any){

    this.asyncChildren=[];
    let results=data;
    for (const key in results) {
      if (results[key] instanceof Array) {
        const containerTyp2 = {name: '', hasChildren: false,};

        containerTyp2.name = key;
        containerTyp2.hasChildren = true;

        this.asyncChildren.push(containerTyp2);
     } else {
        const object = {name: ''};

        const containerTyp1 = {name: '', children: []};
        object.name = results[key];
        containerTyp1.name = key;
        containerTyp1.children.push(object);
        this.asyncChildren.push(containerTyp1);
    }
    this.tree.treeModel.update();
  }
return this.asyncChildren;
  }
 public string ChildTranslator(){
    return this.nodeservice.GetChildNodes();
}
上面的代码会弹出下面的错误

 public string ChildTranslator(){
    return this.nodeservice.GetChildNodes();
}
无法读取未定义的属性“map”

 public string ChildTranslator(){
    return this.nodeservice.GetChildNodes();
}
有人能帮我做这件事吗?我可以知道我在上面的代码中遗漏了什么吗?任何帮助都将不胜感激。多谢各位

试试这个:

getChildren(node: any) {

    return new Promise((resolve, reject) => {
        this.nodeservice.GetChildNodes().subscribe(data=>{
            this.asyncChildren= this.transformer(data);
            const newNodes =  this.asyncChildren.map((c) => Object.assign({}, c));
            setTimeout(() => resolve(newNodes), 1000);
        });        
    });
}
 public string ChildTranslator(){
    return this.nodeservice.GetChildNodes();
}

更改
getChildren
方法如下:

getChildren(node: any) {
    const newNodes =  this.ChildTranslator().subscribe(data=>{
    this.asyncChildren= this.transformer(data);
    this.asyncChildren.map((c) => Object.assign({}, c));
    return new Promise((resolve, reject) => {
      setTimeout(() => resolve(newNodes), 1000);
    });
   });
  }
 public string ChildTranslator(){
    return this.nodeservice.GetChildNodes();
}
另外,从
ChildTranslator
方法返回如下值:

 public string ChildTranslator(){
    return this.nodeservice.GetChildNodes();
}

ChildTranslator()
不返回值。@Niranjan Anytime但唯一的问题是它一直在调用getChildren方法数千次。@Niranjan什么一直在调用
getChildren
?this.asyncChildren=this.transformer(数据);这是我一直在打电话。我已经发布了上面的实现。@Niranjan您在哪里调用
getChildren
方法?