Arrays 仅在订阅服务时定义角度2 TS对象数组

Arrays 仅在订阅服务时定义角度2 TS对象数组,arrays,object,angular,typescript,observable,Arrays,Object,Angular,Typescript,Observable,我正在学习使用TypeScript的Angular 2。到目前为止,我已经编写了一个小的API服务,它使用httpget方法使用可观测数据向我提供json数据。一切正常,我可以使用视图中的数据,也可以使用组件中的数据,但是只能在订阅了getData()方法时使用 为什么会这样?为了便于迭代和管理,我还必须具备哪些其他可能性才能使组件中的所有方法都可以使用对象数组? 组件示例: export class SomeComponent implements OnInit { public so

我正在学习使用TypeScript的Angular 2。到目前为止,我已经编写了一个小的API服务,它使用httpget方法使用可观测数据向我提供json数据。一切正常,我可以使用视图中的数据,也可以使用组件中的数据,但是只能在订阅了getData()方法时使用


为什么会这样?为了便于迭代和管理,我还必须具备哪些其他可能性才能使组件中的所有方法都可以使用对象数组?

组件示例:

export class SomeComponent implements OnInit {

  public someData: DataObject[];

  public constructor(private service: SomeService) {}

  public ngOnInit(): void {
    this.loadData();
    this.useData();
  }

  private loadData(): void {
    this.service.getData().subscribe(data=> {
      this.someData = data;

      this.someData.forEach(dataObject => {
        // this works fine
      });
    });
  }

  private useData(): void {
    this.someData.forEach(dataObject => {
      // dataObject is (of type?) undefined, why?
    });
  }

}

这是因为http调用是异步的。您的
this.useData()不等待
this.loadData()完成。这应该起作用:

  private loadData(): void {
    this.service.getData().subscribe(data=> {
      this.someData = data;

      this.useData();
    });
  }

谢谢你的快速回复。我能以某种方式使loadData方法同步吗?我有两个方法加载两个不同的对象数组,在加载完这两个数组后,我需要立即对它们进行迭代。我不想通过在一个方法中加载它们来混淆它们。换言之:我可以等待并检查加载的数据,以便在以后调用我的方法吗?我在某个时候对此进行了快速研究,据我所知,没有办法等待异步函数。您需要在回调函数中实现逻辑。你可能想用谷歌搜索一下,看看事情是否发生了变化。公平地说,既然我知道了问题所在,我会尝试用谷歌搜索。谢谢