首页 文章

Angular 2:Observable订阅无法正确读取数据[重复]

提问于
浏览
2

这个问题在这里已有答案:

我试图从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打印出像这样的对象数组 - >

Display Array on console

但是,我尝试打印第二个console.log,我得到数组的大小为零 . 有什么东西我错过了吗?

2 回答

  • 2

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

    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)}
        );
    
  • 1

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

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

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

相关问题