2017-02-12 30 views
0

我有高度的訪問令牌每一個請求自定義HTTP服務,我想用一個訪問令牌從ionic2存儲值檢索ionic2存儲的價值,並連接到一個值失敗

這是代碼從我的前兩個問題

所以在HttpClient的服務,我有

@Injectable() 
export class HttpClient { 
    authtoken: string; 
    storage: Storage; 

constructor(private http: Http, storage: Storage, private _authService:Authservice) { 

    this._authService.tokenEvent.subscribe(res => { //subscribing to token event in authservice 
    if (res) { 
     this.storage.get('token') 
     .then(token => { 
      this.authtoken = token 
     }); 
     } 
    }) 
    } 

    get(url){ 
     let headers = new Headers(); 
     this.createGeneralHeaders(headers); 
     return Observable 
      .flatMap( //retuns an error flatmap doesnt exist on observable 
      name => this.http.get(`${url}?access-token=${this.authtoken}`, {headers}) 
     ); 

    } 

在authservice我在哪裏設置令牌

tokenEvent: Subject<any> = new BehaviorSubject(null); 

    login(user: UserModel): Observable<any> { 
    return this._http.post(this.loginurl + "mobile-login", body) 
    .map((response: Response) => { 
     let token = response.json().access_token; 
     if (token) { 
      this.storage.set('token', token).then(res => this.tokenEvent.next(true)); 
     return true; 
    } 
    }) 
//.catch(this.handleError); 

}

現在我可以以任何http請求容易地使用get從第一服務等

getChecklists(truckid): Observable<any> { 

return this._httpclient.get(this.inspectionurl + "get-checklists") 
    .map(res=>res.json().data) 

}

上述第一服務retuns該flatmap犯規存在一個錯誤。如何調整的第一個服務於另一個HTTP請求來使用,也可以從

兩個解決方案都基於令牌事件附加一個令牌this questionthis question

回答

2

我不認爲你需要一個flatmap這裏,看到這個鏈接:

http://reactivex.io/documentation/operators/flatmap.html

只有當你的反應是觀測和要合併,你會使用,我不認爲這是你的目標在這裏流。

所以在HttpClient的你 '獲得' 功能將成爲:

 get(url){ 
      let headers = new Headers(); 
      this.createGeneralHeaders(headers); 

      return this.http.get(`${url}?access-token=${this.authtoken}`, {headers});    
     }