2016-04-28 6 views
1

私はそれぞれに自分の認証ヘッダを追加するために、HTTPオーバーライドクラスを持っているが、私は私のIonic2/Angular2アプリケーションで作る呼び出します。私はそれがテストのためにハードコードされた認証値と正常に動作していたが、今私は(Ionic2のlocalStorageを使用して)ローカルストレージから資格情報を取得し、私は戻って私のサービスへの復帰問題を抱えている作品を追加する必要があります。 "[null]に未定義のプロパティ 'マップを読み取れません"というエラーが表示されます。HTTPクライアント - Ionic2/Angular2のApp

私は「戻る」または(私は可能であれば簡単にするために好きですが、一度に1つの問題だろう)私のネストされた約束と何かのように欠けています非常にシンプルなものがあるような気がします。 Ionic 2とAngular 2はどちらもかなり新しいので、私は正しいソリューションをオンラインで見つけることができませんでした。 LocalStorageが約束を返すとは期待していませんでした。

これは私のHttpClientをインターセプタクラスから私のコードです:

getAuth(){ 
    return this.local.get("UserName") 
    .then(res => { 
     this.user = res; 
     return this.local.get("Token").then(res => this.session=res); 
    }); 
} 

get(url) { 
    let headers = new Headers({ 
    'Accept': 'application/json', 
    'Content-Type': 'application/json; charset=utf-8' 
    }); 
    let params = new URLSearchParams('format=json'); 

    this.getAuth().then(() => { 
    var authHeader = 'Basic ' + this.encode(this.user + ':{SessionToken}' + this.session); 
    headers.append('Authorization',authHeader); 

    return this.http.get(url, { 
     headers: headers, 
     search: params 
    });   
    }); 
} 

ヘッダが正しいとに.getへの呼び出し自体が正常に動作します。それは私のサービスでそれを使用し、エラーが発生したことを.map()しようとするときだけです。私はインポート「rxjs /追加/オペレータ/マップ」を持っています。私のサービスで。ブラウザがリフレッシュすると、私が取得

getTodos(id){ 
    var url: string = this.global.APIUrl + "/" + id; 

    return this.httpClient.get(url) 
    .map((res)=> res.json()); 
} 

:これは私がサービスからそれを呼び出す方法です

[ヌル]

た場合に未定義のプロパティ「マップ」を読み取ることができません私はそれが約束を返しますが、エラーが、それは「未定義」戻っていることを示し、この時点でconsole.log(this.httpClient.get(url))。おそらく、HttpClientクラスが正しくコンパイルされていませんが、私は間違っているかを把握するために、そのクラスからすべてのエラーを取得していませんよ。

答えて

2

は私がその活用Observable.fromPromiseflatMapオペレータのようなものをしようとするだろう:

get(url) { 
    let headers = new Headers({ 
     'Accept': 'application/json', 
     'Content-Type': 'application/json; charset=utf-8' 
    }); 
    let params = new URLSearchParams('format=json'); 

    return Observable.fromPromise(this.getAuth()) 
     .flatMap(() => { 
     var authHeader = 'Basic ' + this.encode(this.user + ':{SessionToken}' + this.session); 
     headers.append('Authorization',authHeader); 

     return this.http.get(url, { 
      headers: headers, 
      search: params 
     });   
     }); 

問題は、あなたが、その後に指定された約束のコールバックの中にあなたに観察を返すことではなく、get方法について。そのため、undefinedというエラーが発生しています。

関連する問題