2017-08-20 9 views
1

私のTypescriptコードから、私はC#で書かれたWebサービスを呼び出します。私のtypescriptコードはこのように見え、私のサービスがHTTP200を返すときには期待どおりに動作しますが、サーバーが資格情報を拒否してHTTP 400をスローすると、マップ関数内で中断しません。これがそうでstatus, statusTextなどのプロパティを定義するResponseクラスの定義を見てみるとサービスを返すときに.mapは動作しません。HTTP 400

return this.http.post(this.authenticationEndpoint, params) 
     .map((response:Response) => { 
       let resp = response; 
       let token = response.json() && response.json().access_token; 
       if(token){ 
        this.token = token; 
        localStorage.setItem('user', JSON.stringify({userName: userName, token:token})); 
        return true; 
       } 

       return false; 
      }) 

enter image description here

。 AngularとTypescriptに関する限られた知識があれば、サービスから返されたHttpコードにかかわらず、map関数内で壊れてしまうと思いますか?このケースをどうすれば処理できますか? My機能は、あなたが観測エラーをcatchする必要がObservable<boolean>

+0

エラーを処理するために '.catch'メソッドを使用するか、またはあなたの加入者でそれらを扱います。また、コールバック引数の型を指定する必要はありません。 '(response:Response)=> ...'はただ '' response => '' –

+0

でなければなりません。または、間違った言葉を使いましたが、あなたが400回の回答を得たときにそれが壊れていたことを意味しましたか?それとも、コールバック関数の中に決して進まないということですか?あなたが使用しているAPIに適したキャッチまたは同様のコールバックをAluanが言及して使用するときには、後者が必要です。 –

+0

申し訳ありませんが、ブレークで私はそれが最初の行にブレークポイントをヒットしないことを意味するresp = response; –

答えて

3

を返すここに例です:

export class ApiGateway { 
 

 
    baseURL = "https://myapi.com"; // or sometimes pulled from another file 
 
    constructor(private http: Http) {} 
 

 
    get(path, params) { 
 
     showLoadingIndicator(); 
 

 
     let headers = this.createMySpecialHeaders(); 
 
     let options = { 
 
     headers: headers 
 
     } // and whatever else you need to generalize 
 
     let fullUrl = this.baseUrl + path + '?' + this.urlEncode(params) 
 
     `; 
 
    return this.get(path, params, options) 
 
       .do(() => hideLoadingIndicator()) 
 
       .map(res => res.json()) 
 
       .catch(err => { 
 
        hideLoadingIndicator(); 
 
        // show error message or whatever the app does with API errors etc 
 
        // sometimes rethrow the error, depending on the use case 
 
       }) 
 
    } 
 
}

+0

答えをありがとう。私が完全に理解していないこと。 HTTP400が発生すると、実際に例外がスローされますか?なぜこれはマップメソッド内で処理できないのですか?ありがとう! –

+2

'map'は成功すると発生し、' catch'はエラーの際に起こります。さらに読むためhttps://stackoverflow.com/questions/35326689/how-to-catch-exception-correctly-from-http-request – Microsmsm

関連する問題