2016-10-27 5 views
0

Http呼び出しにobservablesを使用していますが、正常に動作していますが、コントローラを変更して、コードがエラーを処理していないことに気付きました。ここで角2:Observableのhttp.getがエラーを処理しない

は私のサービス(SellingMenuService)からのコードを見ている:

public getVarieties(): Observable<any> { 
    return this.http.get(this.varietyListUrl).map(response => { 
     return response.json(); 
    }, (error: any) => { 
     console.log(error); 
     console.log('error finding variety list'); 
     // TODO: implement error handling here. 
    }); 
} 

そして、ここでは私のコンポーネントから関連するコードです:

constructor(public sellingMenuService: SellingMenuService) { } 

getVarietyList(): void {   
    this.sellingMenuService.getVarieties().subscribe(res => {    
     console.log(res); 
     this.varieties = res; 
    });   
} 

そして、ここでは私のコンソールに多少の誤差あり: enter image description here

500エラーが発生した場合、上記のサービスからのコンソールログにヒットしないようにしてください。なぜ彼らはいないのですか?

+0

[ここで公式に推奨される方法](https://angular.io/docs/ts/latest/を_Angular.io_からのHTTPリクエストの例外を処理するには、/ guide-server-communication.html#!#エラー処理)。ページ下部の[Plunker]にある[ライブサンプル](https://embed.plnkr.co/?show=preview)へのリンクがあります( '/ app/toh/hero.service.ts'からHTTPクライアントサービスのコードを参照してください)。 –

答えて

1

map()の中にエラー処理ロジックがあるようです。

import 'rxjs/add/operator/catch'; 

return this.http.request(request) 
    .map(res => res.json()) 
    .subscribe(
    data => console.log(data), 
    err => console.log(err), 
    () => console.log('yay') 
); 

参照:How to catch exception correctly from http.request()?

1

あなたはsubscribe内でそれを行う必要がありながら、map方法でエラーをキャッチしようとしています。

public getVarieties(): Observable<any> { 
    return this.http.get(this.varietyListUrl).map(response => { 
     return response.json(); 
    }).subscribe((res: any) => { 
     console.log(res); 
    }, (error: any) => { 
     console.log(error); 
     console.log('error finding variety list'); 
     // TODO: implement error handling here. 
    }); 
} 

また、observableに3番目のパラメータを追加することもできます。観測可能でfinalizedときに解決されます:

public getVarieties(): Observable<any> { 
    return this.http.get(this.varietyListUrl).map(response => { 
     return response.json(); 
    }).subscribe((res: any) => { 
     console.log(res); 
    }, (error: any) => { 
     console.log(error); 
     console.log('error finding variety list'); 
     // TODO: implement error handling here. 
    },() => { 
     console.log("finalized") 
    }); 
} 

あなたがここで詳細を読むことができます: http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html

+1

あなたのコードを試しましたが、次のビルドエラーが発生しました: 'サブスクリプション'タイプを 'Observable 'に割り当てることができません – Brett

+0

plunkrで再現できますか? –

関連する問題