2017-02-13 35 views
0

试图找出可能对不是新的observables和angular2的人有明显答案的东西。通过角度2中的http.get中的错误处理程序返回数据

我打电话给一个http.get来从服务器获取数据。但是,如果出现某种错误,我想返回一组预定义的数据。 我意识到,在我的订阅错误函数中,我可以在那里加载预定义的数据,但我希望服务来照顾它。

所以,如果我有一个服务做这个...

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); 

我怎样才能从.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')); 

是否有不同的方式来做到这一点? 感谢

回答

0
return this.http.get('http://localhost:3000/categories/') 
      .map(this.extractData) 
      .catch(() => Observable.of(CATEGORIES)); 

the documentation

+0

感谢。我曾尝试过这样做,但我的打字稿不会编译...告诉我属性'的'不存在typeof Observable? – Gotts

+0

好吧,我的坏。没意识到我还必须导入'' 'import'rxjs/add/observable/of'; 感谢您的帮助 – Gotts