2017-09-29 17 views
1

Angular4で失敗したPUT HTTP要求を処理するためのベストプラクティスガイドラインを探しています。Angular4で失敗したHTTP putを処理する方法

私のシナリオ:単純なコンポーネントは、put要求でAPIを呼び出してレコードを更新しようとします。

例のコードスニペット:

私のコンポーネントは、このコードが含まれています。

this.workStreamService.save(this.workStream); 

これは、このコードを持っているworkStreamServiceと呼ばれるサービスのメソッドを呼び出している:

save(workStream: WorkStream): Promise<WorkStream> { 
    const url = this.workStreamUrl + '/' + workStream.id; 
    return this.http 
    .put(url, JSON.stringify(workStream), {headers: this.headers}) 
    .toPromise() 
    .then(() => workStream) 
    .catch(this.handleError); 
} 

コードしていますAngular4チュートリアルのほとんどはコピー貼り付けされていますが、このチュートリアルではエラーや成功を処理するのに十分な深さはありません。

APIは、応答ボディ、オブジェクト、またはDTOをHTTPステータスコードだけで返しません。成功のために200、何かが間違っていたら500。

渡されたworkStreamオブジェクトがOKで、サービスが実行されていてエラーをスローしない場合、これは正常に動作します。サービスが失敗して500を返す状況では、コンポーネント内でこれを200応答とは異なる方法で処理できるようにしたいと考えています。 (例 - コンポーネントは「成功」メッセージを表示するか、ユーザーに「この呼び出しに失敗しました」というメッセージを表示して、再試行を促します)。

私はAngular4が新しく、この種の処理の例は見つかりません。事前にお手数をおかけします。

答えて

0

handleErrorの方法は何ですか?このようputとして

this.workStreamService.save(this.workStream) 
    .then(workstream => // Do something on success) 
    .catch(() => // Do something on error); 

角度のHTTPメソッドを扱います:あなたはあなたのエラーがコンポーネントにトリクルダウンし、同様の方法で消費することができ、この方法を省略し、またはその中にPromise.reject()を再スローいずれかの場合

あなたのコードで - あなたのサービスが成功コードを受け取った場合、それは解決済みの約束(Observableステージ全体を通過した後)に翻訳されます。そうでなければ、.catchで消費のための拒絶約束に変換されます。

+0

これはあなたの質問に明るい光を当てるのに役立ちましたか? – UncleDave

+0

ああ!親切にありがとう、それはあなたがそれのように説明するとき、今とてもシンプルなようです。私はそれが自動的に返されたオブジェクトを返した(私は明示的にそれをやろうとしていた)気づいていませんでした。 ありがとう! –

関連する問題