Angular2正在向控制台记录错误,即使我在可观察到的RXJS中捕获/吃了错误

Ash*_*aie 5 rxjs angular

我有一个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);
    });
  }
Run Code Online (Sandbox Code Playgroud)

这是服务构造函数:

  constructor(public http: Http) {
    this.valSource = new ReplaySubject<TestData | boolean>(1);
    this.val$ = this.valSource.asObservable();
    this.getVal()
      .subscribe(val => {
        this.valSource.next(val);
      });
  }
Run Code Online (Sandbox Code Playgroud)

这是柱塞

我简化了代码,并将其更改为使用HTTP / 404错误以在插件中工作。

一切正常。我看到控制台错误只是令人讨厌。

Mar*_*ten 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);
  });
Run Code Online (Sandbox Code Playgroud)

现在控制台的输出:

  1. 要做 badUrl 请求
  2. 获取https://run.plnkr.co/cQP7WCgUkOmjfvoq/badUrl 40 test-service.ts!transpiled:69
  3. 饮食错误反应...