Angular 2:Observable订阅无法正确读取数据

时间:2017-06-30 21:04:04

标签: angular typescript

我正在尝试从ngrx Store获取数据(对象数组)并使用Angular 2中Observables提供的subscribe选项分配给数组,但问题是当我尝试读取数组的内容时。以下是一段代码 - >

 metaData$: Observable<MetaClassDefinition[]>;
    myArray: MetaClassDefinition[] = [];  

    constructor(private store: Store<fromRoot.State>) {
      this.metaData$ = store.select(fromRoot.getMetadata);
    }

    this.metaData$.subscribe(
       data => {
          if (data.length > 0) {
             // Deep copy array
             data.forEach(v => this.myArray.push({...v}));
          }
       },
       error => { console.log(error)}
    );

    console.log(this.myArray);  //-------(1)
    console.log(this.myArray.length);   //-------(2)

现在,第一个console.log打印出像这样的对象数组 - &gt;

Display Array on console

但是,我尝试打印第二个console.log,我得到数组的大小为零。 我有什么东西可以在这里找到吗?

2 个答案:

答案 0 :(得分:2)

这是因为异步操作的时序问题。在订阅中移动控制台语句以查看更多您期望的内容。

要添加到此...通过将对象引用记录到控制台...然后稍后打开...数据已到达此时并显示在调试器中。

立即评估数组计数(在检索数据之前),因为它是一个简单的数字,不会重新评估。

答案 1 :(得分:1)

尝试在订阅中打印数组信息。

this.metaData$.subscribe(
       data => {
          if (data.length > 0) {
             // Deep copy array
             data.forEach(v => this.myArray.push({...v}));
             //HERE
             console.log(this.myArray);  //-------(1)
             console.log(this.myArray.length);   //-------(2)
            // END  
          }
       },
       error => { console.log(error)}
    );