2017-01-03 23 views
0

我有這個角度http的子類,它在我的應用程序中需要注入的地方。事情是:我需要檢查一些值,即使它們不是http錯誤代碼,並返回Observable響應。問題是訂閱返回訂閱。如何從訂閱「嗅探」數據並仍然返回一個可觀察的數據<Response>

該類的目的是透明地處理一些常見的http錯誤globaly(而http錯誤 - > catch塊;或api錯誤 - > json字段要在訂閱塊中檢查)。

import {Injectable} from '@angular/core'; 
import {Http, ConnectionBackend, RequestOptions, RequestOptionsArgs, Request, Response} from '@angular/http'; 
import {Observable} from 'rxjs/Observable'; 
import 'rxjs/add/operator/catch'; 
import 'rxjs/add/observable/throw'; 

@Injectable() 
export class CustomHttpService extends Http { 

    constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) { 
     super(backend, defaultOptions); 
    } 

    request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> { 
     return super.request(url, options) 
      .catch((error: any) => { 
       // Do something here, maybe some redirect. 
       return Observable.throw(error); 
      }) 
      .subscribe(res => { 
       if (res.json().status === 401) { 
        // Do something here, maybe some redirect too. 
       } 
       return Observable.of(res); 
      }); 
    } 

} 

我正在閱讀rxjs文檔,但我仍對許多概念感到困惑。任何幫助將不勝感激。

回答

2

使用map()而不是訂閱,訂閱是管道的末端,處理程序,你要修改它。

.map(res => { 
    if (res.json().status === 401) { 
    // Do something here, maybe some redirect too. 
    } 
    return res; 
}); 
+0

非常感謝,男人!就是這樣! –