我有一个应用程序,它由三个类组成: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之间)
答案 0 :(得分:0)
在MiddleService
中,不要抛出异常,将错误传递给主题。
error => {
debugger;
this.getDataSubject.error(error.status);
//return Rx.Observable.throw(error);
}