刷新页面时无法读取 mergeMap Observable 上未定义的 属性 'subscribe'
Cannot read property 'subscribe' of undefined on mergeMap Observable when page refreshed
我遇到这个问题,当我在页面刷新时调用以下方法订阅时,出现错误"Cannot read property 'subscribe' of undefined"
这是我的进口商品:
import {Observable} from 'rxjs/Observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import "rxjs/add/operator/mergeMap";
这是我刷新页面时导致错误的方法:
getChildSubItem(subItemTag:string): Observable<ChildSubItem[]> {
return this.subItemObservers$.mergeMap(obs => {
return obs.find(s => s.subItemTag === subItemTag)
.viewSubItemSource.asObservable();
});
}
我有几个用于创建 BehaviorSubject 和 BehaviorSubject 的 Observable 的属性。我为 SubItemObservers 数组创建了一个可观察对象,因为我需要首先通过另一个服务调用来填充它。
private subItemObserversSource = new BehaviorSubject<SubItemObservers[]>([]);
private subItemObservers$: Observable<SubItemObservers[]> = new Observable<SubItemObservers[]>();
这是 SubItemObservers 的 class:
export class SubItemObservers {
subItemTag: string;
viewSubItemSource: BehaviorSubject<ChildSubItem[]> = new BehaviorSubject<ChildSubItem[]>([]);;
}
基于Google 搜索,我需要完成 return Observable 对象的方法。但是,我不确定如何使用我的解决方案来做到这一点。有人可以帮助我如何完成该方法中的订阅以解决错误。我错过了什么?
谢谢。
首先,BehaviourSubject 继承了 Observable,所以您可能不需要那样的 2 个流。
其次,rxjs6有一个使用pipe
的最佳实践。
在 getChildSubItem 中,您只需调用 this.subItemObserversSource.pipe(mergeMap...)
。
一旦你在声明中初始化你的subItemObserversSource = new BehaviourSubject
,你就不应该得到任何未定义的错误。
此外,最好仔细检查 obs.find(s => s.subItemTag === subItemTag)
以防万一 returns undefined
.
希望对您有所帮助。
我遇到这个问题,当我在页面刷新时调用以下方法订阅时,出现错误"Cannot read property 'subscribe' of undefined"
这是我的进口商品:
import {Observable} from 'rxjs/Observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import "rxjs/add/operator/mergeMap";
这是我刷新页面时导致错误的方法:
getChildSubItem(subItemTag:string): Observable<ChildSubItem[]> {
return this.subItemObservers$.mergeMap(obs => {
return obs.find(s => s.subItemTag === subItemTag)
.viewSubItemSource.asObservable();
});
}
我有几个用于创建 BehaviorSubject 和 BehaviorSubject 的 Observable 的属性。我为 SubItemObservers 数组创建了一个可观察对象,因为我需要首先通过另一个服务调用来填充它。
private subItemObserversSource = new BehaviorSubject<SubItemObservers[]>([]);
private subItemObservers$: Observable<SubItemObservers[]> = new Observable<SubItemObservers[]>();
这是 SubItemObservers 的 class:
export class SubItemObservers {
subItemTag: string;
viewSubItemSource: BehaviorSubject<ChildSubItem[]> = new BehaviorSubject<ChildSubItem[]>([]);;
}
基于Google 搜索,我需要完成 return Observable 对象的方法。但是,我不确定如何使用我的解决方案来做到这一点。有人可以帮助我如何完成该方法中的订阅以解决错误。我错过了什么? 谢谢。
首先,BehaviourSubject 继承了 Observable,所以您可能不需要那样的 2 个流。
其次,rxjs6有一个使用pipe
的最佳实践。
在 getChildSubItem 中,您只需调用 this.subItemObserversSource.pipe(mergeMap...)
。
一旦你在声明中初始化你的subItemObserversSource = new BehaviourSubject
,你就不应该得到任何未定义的错误。
此外,最好仔细检查 obs.find(s => s.subItemTag === subItemTag)
以防万一 returns undefined
.
希望对您有所帮助。