【问题标题】:Angular2 is logging an error to console even though I catch / eat error in RXJS observable即使我在 RXJS observable 中捕获/吃错误,Angular2 仍在向控制台记录错误
【发布时间】:2016-11-23 08:19:42
【问题描述】:

我有一个 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 中工作。

一切都按预期进行。看到控制台错误真是烦人。

【问题讨论】:

  • 好吧,你做了console.log('eating error', error); 所以我希望它会在控制台中看到。
  • console.logs 用于显示正确的代码正在执行。查看 zone.js 中的 console.error。

标签: angular rxjs


【解决方案1】:

看来您的问题与 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);
  });

现在控制台的输出:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 2021-10-24
  • 2021-09-04
相关资源
最近更新 更多