2016-11-23 10 views
0

すべての私のバックエンドAPIリクエストは、例外をスローした場合でも、ヘッダ内に新しいトークン情報を返します。次回のリクエストでは、これらの新しいトークン情報を送信する必要があります。角2 - 成功とエラーの両方で呼び出されるHttpリクエストメソッド

だから私はそれを行うためのユニークかつ標準的な方法を把握しようとしている。今のところ

let requestOptions = new RequestOptions(Object.assign({ 
    method: method, 
    url: environment.apiHost + url, 
    body: body, 
    headers: authenticatedRequest ? this.requestService.getAuthHeaders() : this.requestService.getJsonHeaders(), 
    withCredentials: authenticatedRequest 
})); 

this.http.request(new Request(requestOptions)) 
    .map((res:Response) => this.storageService.setAuthInfo(res.headers)) 
    .catch((error:any) => this.storageService.setAuthInfo(res.headers)); 

を私はマップとキャッチ方法で新しいトークンを設定する必要があります。新しいトークン情報(this.storageService.setAuthInfo(res.headers))を設定できる成功とエラーの両方の場合に呼び出されるメソッドがありますか?

答えて

0

.finallyを使用することができますが、機能を使用すると、responseのものを制御できません。だから、より良いmapが観測可能な機能を持っている&そこからheaders情報をいくつかの変数に取ります。その後、finallythis.storageService.setAuthInfoメソッド呼び出しから渡します。

コード

myRequest(){ 
    let header; 
    this.http.request(new Request(requestOptions)) 
     .map((res:Response) => { 
      //take headers to pass it when request succeed/fails 
      header = res.headers; 
      return res.json(); 
     ) 
     .finally(() => this.storageService.setAuthInfo(headers)) 
} 
+0

は動作しませんでした。 headers変数は.finally()で定義されていません。私はマップメソッドが成功の戻り値でのみ呼び出されると思います。 –

+0

これはエラーケースのみで起こっていますか? –

+0

はい、エラーが発生したときにヘッダーが設定されていません。 –

関連する問題