通过 angular2 中 http.get 中的错误处理程序返回数据
Returning data via the error handler in an http.get in angular2
试图找出一些可能对不熟悉可观察对象和 angular2 的人有明显答案的东西。
我正在调用 http.get 从服务器获取数据。但是,如果出现某种错误,我想 return 一组预定义的数据。
我意识到在我的订阅错误函数中我可以只加载预定义的数据,但我希望服务来处理它。
所以如果我有这样的服务...
getCategories(): Observable<string[]> {
return this.http.get('http://localhost:3000/categories/')
.map(this.extractData)
.catch(this.handleError);
}
private handleError (error: Response | any) {
let errMsg: string = "some error message"
//want to return a constant here return CATEGORIES;
return Observable.throw(errMsg);
}
而不是调用
return Observable.throw(errMsg);
我如何 return 来自 .catch 函数的数据,以便订阅者不会知道其中的区别 - 即它获取的是预定义数据而不是来自服务器的数据。
我的服务调用如下所示
this.myService.getCategories().subscribe(
cats => { this.categories = cats; },
error => {
console.log('Could not fetch categories', error)
//could do this but want it in service
//this.categories = CATEGORIES
},
() => console.log('Unknown error in get categories'));
有没有其他方法可以做到这一点?
谢谢
return this.http.get('http://localhost:3000/categories/')
.map(this.extractData)
.catch(() => Observable.of(CATEGORIES));
试图找出一些可能对不熟悉可观察对象和 angular2 的人有明显答案的东西。
我正在调用 http.get 从服务器获取数据。但是,如果出现某种错误,我想 return 一组预定义的数据。 我意识到在我的订阅错误函数中我可以只加载预定义的数据,但我希望服务来处理它。
所以如果我有这样的服务...
getCategories(): Observable<string[]> {
return this.http.get('http://localhost:3000/categories/')
.map(this.extractData)
.catch(this.handleError);
}
private handleError (error: Response | any) {
let errMsg: string = "some error message"
//want to return a constant here return CATEGORIES;
return Observable.throw(errMsg);
}
而不是调用
return Observable.throw(errMsg);
我如何 return 来自 .catch 函数的数据,以便订阅者不会知道其中的区别 - 即它获取的是预定义数据而不是来自服务器的数据。
我的服务调用如下所示
this.myService.getCategories().subscribe(
cats => { this.categories = cats; },
error => {
console.log('Could not fetch categories', error)
//could do this but want it in service
//this.categories = CATEGORIES
},
() => console.log('Unknown error in get categories'));
有没有其他方法可以做到这一点? 谢谢
return this.http.get('http://localhost:3000/categories/')
.map(this.extractData)
.catch(() => Observable.of(CATEGORIES));