Angular2将观察到的服务中的错误传递给调用app

时间:2016-04-06 16:23:57

标签: angular

我有一个应用程序,它由三个类组成:app(组件),httpService(通过http带来一些数据)和middleService(用于处理数据)

因此,控制流程是:app调用middleService中的函数,该函数调用httpService中的函数,该函数最终调用angular2 http()。然后数据异步返回。错误(例如找不到页面)也应该返回,但它们没有,这就是问题。

以下是代码:

app.ts

constructor(private middleService: MiddleService) {
    this.name = 'Angular2'
    this.data = '';
  }
  getData() {
    this.action = 'click';
    this.middleService.getData$
      .subscribe(
        data => {
          debugger;
          this.data = data
        },
        error => {
          debugger;
          this.error = error;
        }
      );
    this.middleService.getData();
  }

middleService.ts

constructor(private httpService: HttpService) {
    this.getDataSubject = new Rx.Subject<any>();
    this.getData$ = this.getDataSubject.asObservable();
  }
  getData(): void {
    this.httpService.getData()
      .subscribe(
        data => {
          debugger;
          let newData = 'new ' + data;
          this.getDataSubject.next(newData);
        },
        error => {
          debugger;
          return Rx.Observable.throw(error);
        }
      );
  }

httpService.ts

constructor(private http: Http) {
    this.getDataSubject = new Rx.Subject<any>();
    this.getData$ = this.getDataSubject.asObservable();
  }
  getData(): Observable<Response> {
    return this.http.get('./resource/data.txt')
      .map(res => res.text())
      .catch(error => {
        debugger;
        return Rx.Observable.throw(error.text());
      });
  }

这是plunk

httpService中的最后一段代码包含http.get('。/ resource / data.txt')。此文件存在,数据将传递回app.ts.

但是如果您将文件名更改为dataaaa.txt,则会出现“找不到页面”错误。此错误在httpService,middleService中可见,但在app中不可见(它不会显示,并且调试器不会在app.ts的错误分支中停止。)

我的问题是,如何编写middleService将错误传递给app? (假设它必须位于app和httpService之间)

1 个答案:

答案 0 :(得分:0)

MiddleService中,不要抛出异常,将错误传递给主题。

Edited Plunker

error => {
      debugger;
      this.getDataSubject.error(error.status);
      //return Rx.Observable.throw(error);
    }