无法获取未定义或空引用的属性“0”

时间:2017-03-27 23:38:29

标签: angular rxjs observable

我收到以下错误,该错误仅显示在IE / Edge中。

Unable to get propety '0' of undefined or null reference

enter image description here 我以下列方式使用RxJs observable:

getVersions(): void {
  this.databaseService.getProductVersions().subscribe(
    (versions) => this.processVersions(versions),
    (error) => console.error(error)
  );
}

并且在Chrome / Firefox中,这可以正常运行。 productVersions看起来像这样:

getProductVersions(): Observable<any[]> {
    let options = this.header();
    let url: string = this.baseUrl + 'admin/version/searchall';
    return this.http.get(url, options).map(
        response => response.json(),
        error => console.log(error)
    );
}

我是否错误地使用了Observable。我应该取消订阅吗? (我的api调用是有限的,所以从我读过的内容中取消订阅是没有必要的。)

3 个答案:

答案 0 :(得分:0)

同样,据我所知,.map运算符无法处理错误,所以没有使用它。 RxJS提供负责它的.catch方法。

尝试修复它,如果那样做不对,我们会找到另一种解决方案。我不在IDE中自己测试它,所以请原谅我。 =)

答案 1 :(得分:0)

从您提供的图像中,__tryOrUnsub方法引发了错误,这是在取消订阅(或完成)观察者时调用的内部方法。

问题是为什么会发生这种情况,并且我怀疑错误来自this.processVersions(...)电话。否则,您的代码看起来很好,请注意map()运算符的第二个参数用于设置自定义this上下文(请参阅http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-map)。

在您的代码中,您将this设置为函数(error) => console.error(error),但这不应该是一个问题。

答案 2 :(得分:0)

我以为我排除了我正在使用的第三方库。但我发现它发生在那里。所以不是我的代码导致了这个问题。感谢@Martin和@Jakub的帮助。我至少现在正确使用map / catch方法,谢谢你。