我有一个angular 2服务,它在其构造函数中调用http端点以检索当前用户。如果用户未经过身份验证,端点将抛出401。
我的问题是即使我吃错误,NG2也会记录异常。
这是我的服务功能:
getVal(): Observable<TestData | boolean> {
return this.http.get('badUrl', new JsonGetOptions())
.map(this.jsonParser)
.catch((error: any) => {
if (error.status && (error.status === 401 || error.status === 404)) {
return Observable.of(false);
}
return Observable.throw(error);
});
}
这是服务构造函数:
constructor(public http: Http) {
this.valSource = new ReplaySubject<TestData | boolean>(1);
this.val$ = this.valSource.asObservable();
this.getVal()
.subscribe(val => {
this.valSource.next(val);
});
}
以下是Plunker
我已经简化了代码并将其更改为使用HTTP / 404错误在plunker中工作。
一切都按预期工作。我看到控制台错误,这很烦人。
答案 0 :(得分:0)
您的问题似乎与Rx无关。我调整了您的Plunker以执行以下操作:
return Observable.of('')
.do(() => console.log('going to do badUrl request'))
.flatMap(() => this.http.get('badUrl', new JsonGetOptions()))
.map(this.jsonParser)
.catch((error: any) => {
if (error.status && (error.status === 401 || error.status === 404)) {
console.log('eating error', error);
return Observable.of(false);
}
return Observable.throw(error);
});
现在控制台的输出:
- 要做badUrl请求
- 获取https://run.plnkr.co/cQP7WCgUkOmjfvoq/badUrl 40 test-service.ts!已编译:69
- 吃错误响应......
醇>