我有一个组件订阅构造函数中的多个状态片。
@ViewChild(PComponent) PGrid: PComponent;
ngOnInit() {
this.store.pipe(
select(fromReports.getProcessState),
takeWhile(() => this.componentActive))
.subscribe(selectedProcess=> {
if (selectedProcess) {
this.Data= selectedProcess.Data;
}
});
this.store.pipe(
select(fromReports.getProcessAnalysis),
takeWhile(() => this.componentActive))
.subscribe(analysisData => {
if (analysisData) {
this.PGrid.LoadData(analysisData);
}
});
}
第一个订阅订阅对象数组,而第二个订阅调用另一个组件 (@ViewChild(PComponent) PGrid) 中的方法。组件中的LoadData()
方法PGrid
依赖于 this.Data 来自第一个订阅。
当我运行代码时,我对此没有定义。数据虽然selectedProcess.Data
有价值
this.store.pipe(
select(fromReports.getProcessState),
takeWhile(() => this.componentActive))
.subscribe(selectedProcess=> {
if (selectedProcess) {
this.Data= selectedProcess.Data; //undefined
}
});
这意味着当状态的第二部分被订阅并且LoadData()
方法被调用时,它会因为this.Data
未定义而出错。
我相信这是由于 Observable 的工作方式以及由于它们是异步的,因此一个函数可能不会在另一个函数之前返回值。
问题:1 为什么this.Data= selectedProcess.Data;
设置this.Data
为 undefined 即使 selectedProcess.Data
有值
问题 2:我看过,flatMap
但switchMap
由于我是 RxJS 和 NgRx 的新手,我对如何利用它们感到困惑。有小费吗?
PS 在类似的说明中,我在我的 中分别订阅了 2 个切片ngOnInit()
,这是首选方式还是应该将它们结合起来?