无法读取 mergeMap 上未定义的属性'subscribe' 刷新页面时可观察



我遇到了这个问题,当我在页面刷新时调用以下方法订阅时,发生错误"无法读取未定义的属性'订阅'">

以下是我的进口:

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();
});
}

我有几个属性用于创建行为主体和行为主体的可观察量。我为 SubItemObserver 数组创建了一个可观察量,因为我需要首先通过另一个服务调用填充它。

private subItemObserversSource = new BehaviorSubject<SubItemObservers[]>([]);
private subItemObservers$: Observable<SubItemObservers[]> = new Observable<SubItemObservers[]>();

下面是 SubItemObserver 的类:

export class SubItemObservers {
subItemTag: string;
viewSubItemSource: BehaviorSubject<ChildSubItem[]> = new BehaviorSubject<ChildSubItem[]>([]);;
}

基于谷歌搜索,我需要完成返回可观察对象的方法。但是,我不确定如何使用我的解决方案来做到这一点。有人可以帮助我如何在该方法中完成订阅以解决错误。我错过了什么? 谢谢。

首先,BehaviorSubject 继承了 Observable,所以你可能不需要这样的 2 个流。

其次,rxjs6 有一个使用pipe的最佳实践。

在getChildSubItem中,您可以调用this.subItemObserversSource.pipe(mergeMap...)

在声明中初始化subItemObserversSource = new BehaviourSubject后,不应收到任何未定义的错误。

此外,仔细检查obs.find(s => s.subItemTag === subItemTag)总是很好的,以防它返回undefined.

希望对您有所帮助。

相关内容

  • 没有找到相关文章

最新更新