我正在尝试从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;
但是,我尝试打印第二个console.log,我得到数组的大小为零。 我有什么东西可以在这里找到吗?
答案 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)}
);