2016-09-21 13 views
1

[OK]を私はmap()機能について理解していないものが必要です。どちらのサブスクリプションでもというという文字がコンソールに書き込まれていると思います。ただし、http応答のステータスコードが4xxの場合は表示されません。http応答のRxJs/Angular2マップ機能が呼び出されていない

http.get("http://my.domain/rest/path").map(
    data => { 
    console.log("mapped"); 
    return data; 
    } 
).subscribe(
    data => { 
    console.log("good"); 
    }, 
    error => { 
    console.log("bad"); 
    } 
); 

ここに任意のヒント?

答えて

3

map機能は「良い」データのみを処理し、エラーは発生しません。実際には、Okケース(実データ)とBad Requestケース(エラーメッセージ)の異なるボディデータも期待しています。 http.get関数内でエラーをキャッチして処理するために、catchを使用します。

let obs = http.get("http://my.domain/rest/path").map(
    data => { 
    console.log("mapped"); 
    return data; 
    } 
).catch(err => console.log(err)); 

obs.subscribe(...); 
+0

。しかし、例外が検出されるたびにObservableは登録解除されているように見えます(私のデバッガによると、beta11のRxJsのcatch.js:58を参照)、その後の '' subscribe''は "TypeError:プロパティを読み取れません。 iterator) 'of undefined "実際には、HTTPステータス4xx/5xxの場合でも結果を購読して処理する必要があります。 – Matt

+1

PS:Observable.of(...)をキャッチブロックから戻すと、それが機能することがわかりました。 – Matt

2

を角度2 Httpクライアントは4xx5xxステータスコードas errorsと応答を扱います。したがって、mapオペレータは、送信された応答を受信しません。エラーがレスポンスのステータスコードが原因でスローされた場合、エラーがstatusstatusTextプロパティが含まれていることを

注:私は見

http.get("http://my.domain/rest/path").map(
    data => { 
    console.log("mapped"); 
    return data; 
    } 
).subscribe(
    data => { 
    console.log("good"); 
    }, 
    error => { 
    if (error.status) { 
     console.log("somewhat bad: " + error.status); 
    } else { 
     console.log("really bad"); 
    } 
    } 
); 
+0

ソースを掘り下げなければ、httpの '' get''は '' subscribe''で内部的に捕捉された( '' map''と ''によって無視される)ステータス4xx/5xxの例外をスローします。第2の ''エラー ''関数に対する例外のペイロード? – Matt

+1

これは正しいです。合成されたobservableのエラーを処理したい場合は、他の答えで述べたように、 'catch'演算子を含めることができます。 – cartant

+0

素晴らしい。説明ありがとう。 「キャッチ」ブロックが私の前に来るので、私は解答としてハリーの答えを選び、両方に+1を選んだ。 – Matt

関連する問題