2017-07-12 20 views
1

Angular2 + ObservableがHttpエラーを処理する方法について、私はここでこの質問をしています。 Angular2 + Http APIを使用してリクエストを行うとき、応答バックにエラーステータスコードがあり、エラーがスローされます。 Angular2公式スタータープロジェクトに呼び出されるエラーハンドラ関数で角2+ httpエラー処理

:ハンドラで

someObs.catch(handler) 

、それは実際に返されます。

Observable.throw(...) 

を私の質問は、なりません。このです潜在的にWebアプリケーションをクラッシュさせる可能性のある新しいエラーを投げた? Javascriptでは何らかのエラーが発生すると、Webアプリケーションが予期しない動作をする可能性があります。

私がObservable.catchを理解したことは、何らかのエラーが発生したときに、新しいエラーをスローするのではなく、何か他のことをすることです。 そして

Observable.catch 

はまだ返すために最善の解決策になる、観測を返すために私たちを必要とするので:加入者が反応しないように、それはどんな新しい価値を放出しないだろうと

Observable.empty() 

答えて

1

catchの中で特定のエラーを処理できる場合は、観察可能なチェーンを続けるために使用される観察可能なものを返すことができます。状況に応じて、Observable.empty()を返すことは理にかなっているかもしれません。

Observable.emptyを返すと、エラーが発生しました。これは、一般的に言えば、(特にcatchハンドラに何らかの種類のレポート機能が含まれていない場合)大したことではありません。代わりに、エラーを再スローするか、Observable.throwを返すことで、サブスクライバはエラーを処理または報告できます。

サブスクライバがエラーを処理しない場合は、実行時によって異なります。ブラウザでは、エラーが処理されないためアプリケーションがクラッシュすることはありません。それは未処理のエラーとして報告されるだけです。未処理の約束拒否またはキャッチされていないエラーとほぼ同じです。ノードでは、デフォルトでは高速/クラッシュに失敗します。

+0

私はちょっとそれを知っている。 Observableがエラーを見ているようですが、それを処理する方法がわからないので、それをサブスクライバに渡します。それとも、catch節がランダムなエラーをアプリケーションで合意形式に解析してから、サブスクライバに処理させるかのどちらかです。 –

+0

しかし、私は観察可能なエラーがスローされるようにすると、アプリケーションが予期せぬ動作を引き起こします。私の場合は、ボタンと入力がまだ機能していますが(クリックまたは入力できます)、javascriptハンドラーは応答しなくなります –

+0

コンポーネントだけでエラーを処理するためのポイントなので、問題が起こったときに何ができるのか分かります。さまざまなシナリオで、私たちはさまざまなことをしたい – Skeptor

関連する問題